JavaScript中constructor和prototype属性

JavaScript中,无论什么时候,只要创建了一个函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向了该函数的原型对象,在默认情况下,所有的原型对象都会自动获得一个constructor属性,该属性是一个指针,指向prototype所在的函数。

我们可以通过constructor找到构造函数,实际上是因为,该对象继承的构造函数的原型对象,通过调用原型对象中的construction指针找到了prototype指针所在的函数,也就是该对象的构造函数。


当我们重写整个原型对象的时候该原型对象就变成了完全不同的另一个对象,幸运的是,我们可以通过直接给constructor赋值来指定该指针的值,但是构造函数创建的对象中的prototype指针却没办法指向新原型了


贴代码:

function Person(){};

var friend=new Person();
alert(friend.__proto__===Person.prototype);           //true     表示friend的__proto__指向的正是构造函数的原型对象

var tmp=Person.prototype;
alert(friend.__proto__===Person.prototype);           //true     先将原生对象保存

Person.prototype={
    constructor:Person,        //强制让原型的constructor指针指向原构造函数。
    name:'abc',
    age:100,
    job:'def'
};

alert(friend.name);             //undefined    
alert(friend.__proto__===Person.prototype);          //false    friend中的__proto__指针指向的不是现在的原型对象
alert(friend.__proto__===tmp);                       //true     说明friend中的__proto__指针指向的是原来的原型对象



//__proto__连接存在于实例与构造函数的原型对象之间,而不是实例与构造函数之间


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值