js面向对象中的prototype深入理解

原型模式:我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包括可以由特定类型的所有实例共享的属性和方法。

(1)代码如下:

function Person(){

}

Person.prototype.name="xiaoming";

var person1= new Person();

document.write(person1.name);               //xiaoming

其实刚开始给人的第一印象就是在外部直接加属性不是一样的吗?如:

Person.name="xiaoming";        

var person1= new Person();

document.write(person1.name);               //xiaoming

这样输出的结果是一样的,但是是理解上却是不同,理解原型模型对象,无论什么时候,只要创建了一个新的函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象。

(2)代码如下:

function Person(){

}

Person.prototype.name="xiaoming";

var person1= new Person();
var person2=new Person();
person2.name="huahua";
document.write(person1.name);    //xiaoming

document.write(person2.name);    //huahua

这里说明person1和person2都是各自实例化一个Person互不影响;

(3)接下来判断Person.name与Person.prototype.name的区别,代码如下:

function Person(){
      this.name="huahua";
}

Person.prototype.name="xiaoming";

var person1= new Person();
var person2=new Person();
document.write(person1.name);      //huahua

document.write(person2.name);     //huahua

这里说明当Person构造的内部属性等级大于外部使用原型模式。也就是说内部定义的会覆盖掉prototype的原型模式定义。

(4)那如果在外部定义属性的结果呢?代码如下:

function Person(){
}
Person.name="huahua";
Person.prototype.name="xiaoming";
Person.name="huahua";
var person1= new Person();

document.write(person1.name);    //xiaoming

这里说明当在外部定义属性的时候,prototype属性等级高于本身定义的属性,直接覆盖。




猜你喜欢

转载自blog.csdn.net/qq_37909508/article/details/79805908