javascript - 创建具有属性的函数

标签 javascript function object javascript-objects

抱歉,我不知道它的名字。

我想要一个函数和一个对象,其属性只有一个变量。

这是它的工作原理:

var obj = function() {
    return "foo";
};

obj.prop = "bar";

obj(); // => "foo"
obj.prop; // => "bar"

这很好用,但我想改变它的顺序:

var obj = { prop: "bar" };
obj = function() {
    return "foo";
};

obj(); // => "foo"
obj.prop; // => undefined

有办法吗?

我想这样做是因为我有很多属性要添加到对象中:

var obj = function() {
    return "foo";
};

obj.prop1 = "bar1";
obj.prop2 = "bar2";
obj.prop3 = "bar3";
obj.prop4 = "bar4";
obj.prop5 = "bar5";
obj.prop6 = "bar6";
obj.prop7 = "bar7";
//...

最佳答案

这是不可能的,因为当您这样做时:

obj = function() {
    return "foo";
};

...您正在将变量 obj 分配给新函数,因此它不再指向您创建的原始对象 ({ prop: "bar"} ) 完全没有。

因此,如果要向函数对象添加属性,则必须始终先创建函数,然后再添加属性。

作为替代方案,您可以这样做:

var props = {
    prop1: "bar1",
    prop2: "bar2"
};

var obj = function() {
    return "foo";
};

for (var key in props) {
    obj[key] = props[key];  
}

或者如果您碰巧有可用的 jQuery(但没有可用的 Object.assign):

jQuery.extend(obj, props);

(当然有可用于 Object.assign 的垫片,这将允许@Pointy 的答案在旧浏览器中工作。)

关于javascript - 创建具有属性的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32404233/

相关文章:

javascript - Node.JS 和浏览器之间的 RequireJS 对 jQuery 的简单可选依赖

javascript - 如何在正则表达式中使用变量?

javascript - 带有自定义库的 querySelectorAll

javascript - 使用 lodash 将数组转换为对象

function - 有关按月份和地区分组的总平均值的问题 - Google 表格

python - SQLAlchemy - 多个类,相同的表

javascript - 想要通过浏览器使静态 SVG 绘图(来自 matplotlib)具有交互性

Javascript 基于一个下拉弓中的值更改其他 2 个下拉框中的值

c++ - 如何以正确的方式将结构数组参数传递给函数?

c++ - 匹配 'max'的 'std::function<const int &(const int &, const int &)>'没有重载