原型对象,构造函数,实例之间关系
TIM图片20191224104351.jpg
1、当创建一个函数后,同时创建了函数属性prototype---function.prototype,
指向函数的原型对象,原型对象包含的属性方法被所有实例对象共享。
function Person(){
Person.protype.name="ming"
Person.protype.setName=function (){
this.name="huan"
}
}
var person1=new Person()
var person2=new Person()
person1.name//ming
person2.name//ming
2、共享原型对象属性方法,但通过实例person1,peroson2无法修改原型对象属性方法值,只能通过构造函数添加删除修改原型对象属性方法.
每个实例有属性proto(在Firefox、safari,chrome中支持)
person1._prop_=Person.prototype
//表示实例与构造函数的原型对象之间的连接而非实例与构造函数之间连接,因此,通过实例person1,peroson2无法修改原型对象属性方法值,只能通过构造函数添加删除修改原型对象属性方法.
3、原型对象获取一个指向构造函数的指针(属性)constructor指向构造函数
Person.prototype.constructor=Person
4、测试实例与原型对象关系
Person.prototype.isPrototype(person1)//true
person1.getPrototypeOf()=Person.prototype
5、访问顺序
person1.name="nice"
console.log(person1.name)//nice
delete person1.name
console.log(person1.name)//ming
访问时首先访问实例中的name属性,在第二个打印中,首先访问实例无name属性,再访问原型对象name属性
6、访问属性归属测试hasOwnProperty(),当且仅当实例属性名与原型对象属性名相同时返回true
person.name="nice"
person1.hasOwnProperty("name")//true
网友评论