原型链

原型和实例对象

每一个函数天生都有一个原型(prototype),当函数被new关键字调用的时候,产生的实例的__proto__都指向次构造函数的prototype对象

原型链

 

 

 

 function Person() {}
 console.log(Person.prototype);

原型链

  function Person() {}
      var xiaoming = new Person();
      console.log(xiaoming);

原型链

 

此时我们可以判断一下这个xiaoming的__proto__是否等于Person构造函数的prototype

 console.log(xiaoming.__proto__ == Person.prototype)

原型链

构造函数的prototype指向了谁,该实例的__proto__就指向谁

__proto__有什么用?

所有的对象都有__proto__属性,这个属性指向的就是自己的“原型对象”,每一个对象在通过点语法访问自己的属性、方法的时候,都拥有原型链查找(proto search)的功能。什么叫做原型链查找?如果当前对

象自己身上有这个属性或者方法,则用自己的,如果没有则沿着__proto__指向的原型对象中去查找,如果在原型对象上有这个方法,则调用这个原型对象属性或者方法

 function Person(name,sex) {
        this.name = name;
        this.sex = sex;
      }
      Person.prototype.sayHello = function () {
        console.log("你好,我是" + this.name + ",我是一个" + this.sex + "生,")
      };
      var xiaoming = new Person("小明",  "男");
      var xiaohong = new Person("小红", "女");
      console.log(xiaoming);
      console.log(xiaohong);

原型链

此时就可以看到方法是在原型对象上(也就是构造函数的原型上)

原型链

 

 

此时我们也可以验证xiaoming和xiaohong调用的是同一个函数

      console.log(xiaoming.sayHello == xiaohong.sayHello)     

原型链

 

 语法:

function 构造函数(属性1,属性2,属性3) {
this.属性1 = 属性1;
this.属性2 = 属性2;
this.属性3 = 属性3;
}
构造函数.prototype.方法1 = function(){

}
构造函数.prototype.方法2 = function(){

}

构造函数.prototype.方法3 = function(){

}

 

上一篇:这次彻底搞懂JavaScript中的原型与原型链


下一篇:11-原型对象