【问题标题】:How to assign a value to object property via anonymous function?如何通过匿名函数为对象属性赋值?
【发布时间】:2017-03-28 00:33:34
【问题描述】:

假设我有一个带参数的函数。

在这种情况下,我使用的是matchHeight,但我的问题很笼统。

我将所有选项都设置在这样的变量中。

var options = {
    byRow:    true,
    property: 'height',
    remove:   true,
};

然后将其传递给函数:

$('.some_class').matchHeight(options);

现在,我希望能够使用函数动态评估“删除”属性。我的猜测是使用这样的东西:

var options = {
    byRow:    true,
    property: 'height',
    // remove:   true,
    remove: function(){ return true; }
};

但是,它不起作用。这样做的正确方法是什么? 更新:更清楚。 matchHeight 将 remove 视为 boolean property,而不是函数。

我的主要目标是使用函数“模拟”一个布尔值,例如 remove: true

【问题讨论】:

  • 什么意思不起作用?该对象大致正确。这取决于它在matchHeight 中的使用方式,但您还没有显示此代码。如果那不是您的代码,则不能将布尔值换成这样的函数。 options.removeoptions.remove(),它们的调用方式不同
  • options["remove"]?
  • matchHeight 将删除作为boolean property

标签: javascript function object properties eval


【解决方案1】:

如果options.remove 是一个函数,那么你必须实际调用它:

options.remove()

如果您只想使用options.remove 来完成这项工作,则必须使用define the property with a getter

var options = {
    byRow:    true,
    property: 'height'
};

Object.defineProperty(options, 'remove', {
    get: function () { return true; }
});

console.log(options.remove);

【讨论】:

  • 谢谢。不,removeboolean property 不幸的是,您的代码不起作用
  • 嗯……定义“不工作”。当您单击上面的“运行代码 sn-p”时,它正在工作。
【解决方案2】:

您的方法应该有效 - 请参阅此 sn-p:

var options = {
    byRow:    true,
    property: 'height',
    // remove:   true,
    remove: function(){ return true; }
};

function myFunc(options) {
  console.log(options.remove())
}

myFunc(options)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    相关资源
    最近更新 更多