tonysmithone 2017-11-07 08:29 采纳率: 0%
浏览 794

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
        }
    });
  • 写回答

1条回答 默认 最新

  • fcyh 2017-11-07 08:31
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大