从对象文字中设置函数属性

时间:2018-03-28 17:58:17

标签: javascript node.js ecmascript-6

我宣布tasks对象:

var tasks = {

    test: () => {
        /// ....
    }

};

test函数中,我想设置tasks.test.description属性。到目前为止,我已经尝试过:

var tasks = {
    test: () => {
        // need to set tasks.test.description here
        // 
        // tried without success:
        // tasks.test.description = '...';
        // this.description = '...';
        // arguments.callee.description = '...';
    }
};

以及:

var tasks = {
    test: function xxx() {
        // all methods from example above, plus:
        // xxx.description = '...';
    }
};

从功能范围外部访问时,描述始终未定义。

console.log(tasks.test.description); // => undefined

有没有办法在对象文字内的函数定义中设置description属性?

4 个答案:

答案 0 :(得分:2)

您的第一种方法几乎是正确的,但您必须调用该功能才能执行任何操作。

var tasks = {
  test: () => {
    tasks.test.description = '...';
  }
};
tasks.test();
console.log("The value of tasks.test.description is " + tasks.test.description);

答案 1 :(得分:2)

可以使用Object.assign将函数与对象组合:

 test: Object.assign(() => {
    /// ....
  }, {
   description: "whatever"
 })

答案 2 :(得分:0)

console.log(tasks.test.description);返回undefined是您定义的对象,但是在您首次运行tastks.test()方法之前,将创建description属性。要向对象方法添加属性描述,请尝试以下方法:

const tasks = {
  test() {
    //....
  }
};

tasks.test.description = 'asd';

或者

const tasks = {
  test() {
    this.test.description = 'asd';
  }
};

tasks.test();

console.log(tasks.test.description);

答案 3 :(得分:0)

你的一次尝试几乎是正确的。您只需致电tasks.test()即可设置tasks.test.description

var tasks = {
    test: function xxx() {
        xxx.description = '...';
    }
};

tasks.test();
console.log(tasks.test.description);

如果您想在不调用test the answer by Jonas W.的情况下设置该属性即可。