重写原型对象(prototype)

重写后constructor属性的变化以及处理


//创建一个Parent实例
function Parent() {
    this.name = "wgh";
}
//重写Parent的原型对象,并为其手动添加constructor属性,注意在ECMAScript5中默认的constructor是不可枚举的,但是我们手动设置的是可以枚举的,如果要处理的话我们可以通过Object.definePrototype()方法来设置

Parent.prototype={
    constructor:Parent,
    age:23,
    name:"王光辉",
    sayAge:function () {
        console.log(this.age);
    },
    sex:"男"
};
let p1 = new Parent();

检测重写的原型对象constructor属性的可枚举性

Object.keys(Parent.prototype);
//["constructor", "age", "name", "sayAge", "sex"]

Object.definePrototype()方法来对枚举性进行处理

Object.defineProperty(Parent.prototype,"constructor",{
    enumerable:false,
    value:Parent
});

再次检测

Object.keys(Parent.prototype);
//["age", "name", "sayAge", "sex"]

原型的调用问题

重写原型对象切断了现有原型和任何之前已经存在实例之间的关系;他们应用的仍是最初的原型。

function Parent() {
    this.name = "wgh";
}
//注意我们在这里创建了一个实例p2
var p2=new Parent();
//重写原型对象
Parent.prototype={
    constructor:Parent,
    age:23,
    name:"王光辉",
    sayAge:function () {
        console.log(this.age);
    },
    sex:"男"
};

p2.sayAge();//p2.sayAge is not a function
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值