访问/修改函数中的对象 |JavaScript
access/modify an object inside of a function | javascript
假设我有一个函数 - 对象构造函数:
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])。
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值