1原型属性可读,在构造函数中添加值覆盖原型,也是大家常用的方式。
2原型属性不可读,=号赋值操作无效,但是用defineproperty会在构造函数中生成属性
let protoObj={}
Object.defineProperty(protoObj, "key", {
enumerable: true,
configurable: false,
writable: false,
value: "static"
});
console.log(protoObj)
function child(){
}
child.prototype=protoObj;
child.prototype.constructor=child;
let cc=new child();
cc.key=123;
console.log(cc);//无效
Object.defineProperty(cc, "key", {
value: "tom"
});
console.log(cc)//构造函数中设置属性覆盖原型
3属性是setter 走setter Object.defineProperty(..)也可以屏蔽prototype的setter
var myObject = {
// _a_:1,
// 给 a 定义一个 getter
get a() {
return this._a_;
},
// 给 a 定义一个 setter
set a(val) {
this._a_ = val * 2;
}
};
function child(){
}
child.prototype=myObject;
child.prototype.constructor=child;
let cc=new child();
cc.a=22;
console.log(cc);