JavaScript:如何动态定义方法?

时间:2019-04-09 10:49:41

标签: javascript

Object.defineProperty可用于定义属性和getter / setter。但它似乎不支持功能设置方法(方法)。为什么?

var obj = {};
Object.defineProperty(obj, 'myMethod', function () {
    console.log('Hello!');
})

此后,obj.myMethodundefined

4 个答案:

答案 0 :(得分:2)

如果要执行以下操作,则传递给Object.defineProperty的第三个参数应该是具有 value 属性的对象

var obj = {};
Object.defineProperty(obj, 'myMethod', { value: function () {
    console.log('Hello!');
}})
obj.myMethod();

如果您尝试传递非功能,则会抛出此错误:

var obj = {};
Object.defineProperty(obj, 'myMethod', 'foo')

但是函数也是对象,因此在您的原始代码中,defineProperty调用无提示失败。

答案 1 :(得分:0)

您可以使用以下模式:

var obj = { c: 3 };
obj = Object.assign({}, obj, {
    a: function(){
        console.log("testing");  
    }
});

obj.a();
console.log(obj.c);

答案 2 :(得分:0)

在理解一些要点之前

语法:Object.defineProperty(obj,prop,描述符)

obj 用于定义属性的对象。

属性:要定义或修改的属性的名称或符号。

描述符:正在定义或修改的属性的描述符。

const obj = {};

         Object.defineProperty(obj, 'myobject', {
            value: 20,
            writable: false
         });
         obj.myobject = 10;

         document.write(obj.myobject);

答案 3 :(得分:0)

摘自MDN的官方文档。我建议您在实际实现动态功能之前先阅读与创建动态功能有关的问题。

这是一个示例:

function testMe () {
  var obj = {}
  obj.myFunc = new Function('a', 'b', 'return a + b');
  var el = document.getElementById("test").innerHTML = obj.myFunc(1, 2);
}
<div id="test"></div>
<button onclick="testMe();">Try</button>