访问/修改函数中的对象 |JavaScript

access/modify an object inside of a function | javascript

本文关键字:对象 JavaScript 修改 函数 访问      更新时间:2023-09-26

假设我有一个函数 - 对象构造函数:

var constructor = function(name, surname, town){
    return {
        Name: name,
        Surname: surname,
        Town: town
    }
};

现在我可以创建一个新的对象,如下所示:

var peter = constructor("Peter", "Jameson", "London");

我可以使用点表示法向我的新对象添加新属性,peter如下所示:

peter.phoneNumber = 856687;
我的

问题是:当构造函数/函数中的对象没有 var 时,是否可以使用点/括号表示法向我的构造函数添加更多属性?

听起来您正在尝试在运行时修改constructor的行为。你说过:

我想

使用点符号修改构造函数的代码(如果在这种情况下可能的话),例如,我想向我的构造函数添加更多属性。如果代码是这样的:

var constructor = function(name, surname, town){
    var person = { Name: name, Surname: species, Town: town };
    return person;
};

。那么我想我可以像这样修改我的构造函数: {constructor.person.phoneNumber = 554457;但是在我的原始代码中,构造函数内部没有var,所以我无法taget obj

正如@deceze指出的那样,不,即使constructor有一个变量,你也无法做到这一点;该变量对函数来说是完全私有的,它不会作为constructor的属性公开。

运行时修改constructor行为的唯一方法是将其包装在新函数中,如下所示:

(function() {
    var original = constructor;
    constructor = function() {
        var obj = original.apply(this, arguments);
        obj.phoneNumber = 554457;
        return obj;
    };
})();

这将调用原始版本及其接收的所有参数(以及相同的this),然后添加附加属性并返回它。

<小时 />

1 好的,从技术上讲,你可以用toString反编译它(在支持它的浏览器上;从 ES5 开始现在需要支持,所以它非常好),使用文本操作来更改其内容,然后使用 new Function 将其变回函数并将结果分配给constructor,但是 A) 这是一个非常糟糕的主意, 和 B) 函数将失去其上下文,因此如果它依赖于关闭任何不是全局变量的变量,它将停止工作(因此 [A])。