js权威指南里的一段代码,我想测试一个,问题是如何调用这个对象方法,新手求助大神

将p中的属性及特性复制到o对象中,怎么调用这个模板对象方法extend

 /*
    *给Object.prototype添加一个不可枚举的extend()方法
    这个方法继承自调用它的对象,将作为参数传入的对象的属性一一复制
    除了值之外,也复制属性的所有特性,除非在目标对象中存在同名的属性
    参数对象的所有自有对象(包括不可枚举的属性)也会一一复制
*/
Object.defineProperty(Object.prototype, "extend", {
        writable: true,
        enumerable: false,     //不可枚举
        configurable: true,
        value: function(o) {
            var names = Object.getOwnPropertyNames(o);     //得到所有的自有属性,包括不可枚举属性
            for (var i = 0; i < names.length; i++) {
                if (names[i] in this) {        //如果属性已经存在,则跳过
                    continue;
                }
                var desc = Object.getOwnPropertyDescriptor(o, names[i]); //获取o中的属性描述符
                Object.defineProperty(this, names[i], desc);    //用它给当前对象(this)创建一个属性
            }
        }
    });

    //将o中的属性及特性复制到p中
    var p = {};
    var o = Object.defineProperties({}, {
        x: {
            value: 1,
            writable: true,
            enumerable: true,
            configurable: true
        },
        y: {
            value: 1,
            writable: true,
            enumerable: true,
            configurable: true
        },
        r: {
            get: function() {
                return Math.sqrt(this.x * this.x + this.y * this.y)
            },
            enumerable: true,
            configurable: true
        }
    });
0

1个回答

那你直接新建出来,然后再直接调用里边的方法或者是属性

0
u014423965
tonysmithone 抱歉,没听懂,Object.defineProperty()这个方法有两个参数,Object.prototype和o,怎么用下面的p和o替换他们。我这样理解对吗?
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题