构造函数.原型(prototype)和new出来的实例.__proto__的关系

构造函数添加属性和方法的两种方式(含义是不一样的,优先获取构造函数的属性和方法)

注意

new一个实例的话,使用实例的属性和方法,首先看构造函数定义了该属性和方法没有,有的话优先使用,没有的话再向构造函数的原型链prototype上查找该属性和方法

// 创建一个构造函数
function person2() {
  this.name = "小连";
  this.addnum = function () {
    console.log(22);
  };
}
var p2 = new person2();
console.log(p2.name);
p2.addnum();
// 创建一个构造函数
function person1() {}
// 在该构造函数的原型prototype上面定义一个属性或方法
person1.prototype.username = "小明";
person1.prototype.addnum = function () {
  console.log(23);
};
var p1 = new person1();
console.log(p1.username);
p1.addnum();

对应面试题

function A() {}
function B(a) {
  this.a = a;
}
function C(a) {
  if (a) {
    this.a = a;
  }
}
A.prototype.a = 1;
B.prototype.a = 1;
C.prototype.a = 1;
console.log(new A()); //A {}
console.log(new B()); //B { a: undefined }
console.log(new B(2)); //B { a: 2 }
console.log(new C()); //C {}
console.log(new C(2)); //C { a: 2 }
console.log("---");

console.log(A.prototype); //A { a: 1 }
console.log(B.prototype); //B { a: 1 }
console.log(C.prototype); //C { a: 1 }
console.log("---");
console.log(new A().a); //1
console.log(new B().a); //undefined
console.log(new B(2).a); //2
console.log(new C().a); //1
console.log(new C(2).a); //2
// 得出的结论new一个实例的话,使用实例的属性和方法,首先看构造函数定义了该属性和方法没有,有的话优先使用,没有的话再向构造函数的原型链prototype上查找该属性和方法

构造函数

      function person2() {
        this.name = "小连";
        this.addnum = function () {
          console.log(22);
        };
      }
      var p2 = new person2();
      console.dir(p2);
      console.dir(person2);
      console.log("---");
      console.log(p2.__proto__);
      console.log(person2.prototype);
      console.log(p2.__proto__ === person2.prototype);

在这里插入图片描述

总结:p1.proto === person1.prototype;所以说该实例会继承该构造函数原型上面的属性和方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值