修改原型上属性的值

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);

你可能感兴趣的:(修改原型上属性的值)