修改原型上属性的值

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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容