[英]JavaScript access unknown properties of object
情况:
我有多个具有相同结构的JS对象。
在所有这些对象中,都有一个称为console的属性。
我想为每个属性分配一个值(相同的值)。
请在下面找到我的代码的结构 :
NameOfMyObject = function() {
return {
actions: null,
console: null,
init: function() {},
//object specific functions
}
};
我的问题:
目前,我正在分配值手册,但我想这样做是通用的。
程式码片段
this.console = console;
this.actions.console = console;
this.fixtures.console = console;
如何访问对象的属性?
我希望我的问题足够清楚。
这是跨对象共享属性的方式:
function MyClass() {}; MyClass.prototype.console = {}; // Define a "common" property on the prototype var obj1 = new MyClass(); // Create two instances var obj2 = new MyClass(); Object.getPrototypeOf(obj1).console.id = 13; // Assign a value once... console.log(obj1.console.id); // ... and it exists on both instances console.log(obj2.console.id);
共享属性位于原型对象上。
当然,可以使用MyClass.prototype
代替Object.getPrototypeOf(obj1)
,因为您知道obj1
是由MyClass
创建的。 它们给出相同的原型对象。
如果你的财产总是有一个对象的价值和你没有需要更换价值,只有通过该对象上设置属性发生变异 ,那么你并不需要显式引用原型来设定一个新值。
所以这工作:
function MyClass() {}; MyClass.prototype.console = {}; // Define a "common" property on the prototype var obj1 = new MyClass(); // Create two instances var obj2 = new MyClass(); obj1.console.id = 13; // Assign a value once... (getting console from the prototype) console.log(obj1.console.id); // ... and it exists on both instances console.log(obj2.console.id);
但是,如果您更改console
本身,则会在实例上而不是在原型上进行设置:
function MyClass() {}; MyClass.prototype.console = {}; // Define a "common" property on the prototype var obj1 = new MyClass(); // Create two instances var obj2 = new MyClass(); obj1.console = { id: 13}; // Setting an instance property now console.log(obj1.console.id); // ... and it does not exist on both instances console.log(obj2.console.id); // == undefined
因此,如果这种分配仍然可以在原型上进行,则需要将第一个代码块与Object.getPrototypeOf
或MyClass.prototype
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.