使用不同名称复制Object Property的最快方法?

时间:2016-03-21 11:29:44

标签: javascript

是否有更快(更少的代码行)方式来定义具有相同功能但名称不同的这两个属性?

Object.defineProperties(this, {
    "position": {
        get: function() {
            return "get";
        },
        set: function() {
            return "set";
        }
    },
    "pos": {
        get: function() {
            return "get";
        },
        set: function() {
            return "set";
        }
    }
});

2 个答案:

答案 0 :(得分:2)

有几种方法,取决于你的意思更快。

这是一个带有一些例子的jsFiddle:https://jsfiddle.net/4o39yxmk/1/

var obj = {};

var props = {
        get: function() {
            return "get";
        },
        set: function(value) {
                console.log(value);
            return "set";
        }
    };

Object.defineProperties(obj, {
    "position": props,
    "pos": props
});

Object.defineProperty(obj, 'anotherPos', Object.getOwnPropertyDescriptor(obj, 'position'));

// trigger the setter
obj.position = 'myValuePosition';
obj.pos = 'myValuePos';
obj.anotherPos = 'myValueAnotherPos';

// trigger the getter
console.log(obj.position);
console.log(obj.pos);
console.log(obj.anotherPos);

答案 1 :(得分:1)

您可以定义第一个属性,然后将其复制到另一个名称,如下所示:

Object.defineProperty(this, {
    "position": {
        get: function() {
            return "get";
        },
        set: function() {
            return "set";
        }
    }
});
Object.defineProperty(this, 'pos', Object.getOwnPropertyDescriptor(this, 'position'));