gpt4 book ai didi

javascript - 当您不知道属性是变量还是函数时的 javascript 设计模式

转载 作者:行者123 更新时间:2023-11-30 18:41:28 25 4
gpt4 key购买 nike

我的对象中的许多属性可能是一个值或一个返回值的函数。访问值不同于调用函数(foo; vs foo();)。我目前采用以下方法。谁能推荐更好的东西?

var foo = {
bar: function(){
return 1;
},
// bar: 1, // bar may also be a standard value
GetBar: function(){
return $.isFunction(this.bar) ? this.bar() : this.bar;
},
Get: function(property){
return $.isFunction(property) ? property() : property;
}
}
foo.GetBar();//1
foo.Get(foo.bar);//1

我目前正在使用 foo.GetBar();方法,但是因为我必须为每个属性编写一个新函数,而不是 van 是值或函数,所以我认为最好使用 foo.Get(foo.bar);保持干燥的方法。如果您不能推荐更好的解决方案,我仍然希望听到您对所提供的两种方法的反馈。

谢谢。

最佳答案

在这种情况下,我通常使用全局实用程序将每个可能是函数的属性转换为一个,然后始终调用函数而不是访问属性:

function functor(v) {
return typeof v == "function" ? v : function() { return v; };
};

unknown = functor(unknown);
var myVar = unknown();

在那个例子中看起来有点傻,但很容易将它合并到像您这样的对象中:

var foo = {
bar: "some value or function",
get: function(key) {
return functor(this[key])();
}
};

我通常将这种方法用于可能是值或函数的配置变量 - 在这种情况下,我会在传入而不是传出时调用 functor:

function Foo(height, width) {
this.height = functor(height);
this.width = functor(width);
}

// make a new object with a fixed height and a width dependent
// on the current window size
var foo = new Foo(10, function() { return $(window).width() - 100; } );
// now always assume functions
console.log(foo.height(), foo.width());

关于javascript - 当您不知道属性是变量还是函数时的 javascript 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6756894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com