Javascript对象中的横向指针
很抱歉,我不知道有什么更好的方式来回答我的问题。 我知道这是有效的:Javascript对象中的横向指针,javascript,oop,Javascript,Oop,很抱歉,我不知道有什么更好的方式来回答我的问题。 我知道这是有效的: var cyclic = new Object(); cyclic.c = cyclic; 而且这不会破裂 var cyclic = {c: this}; 所以我想知道为什么这不起作用 var foo = {a: 10, b: 5, c:(this.a - this.b)}; 是因为这些元素引用了相同“级别”的其他元素,还是因为我试图一步完成所有工作?有没有一种方法可以在一行中完成这类操作?这不是文本对象,而是窗口对象,
var cyclic = new Object();
cyclic.c = cyclic;
而且这不会破裂
var cyclic = {c: this};
所以我想知道为什么这不起作用
var foo = {a: 10, b: 5, c:(this.a - this.b)};
是因为这些元素引用了相同“级别”的其他元素,还是因为我试图一步完成所有工作?有没有一种方法可以在一行中完成这类操作?这不是文本对象,而是窗口对象,因为您没有使用函数调用它
您可以/应该为此使用构造函数
考虑下面的函数
var Foo = function(a, b) {
this.a = a; //if you want to save state inside the object
this.b = b; //else skip it.
this.c = a - b;
}
//create a new object from Foo
var foo = new Foo(10, 5);
foo.c
>> 5
这并不能说明你认为它能做什么。在函数内部时,这将指向调用该函数的对象:
var o = { foo : function(){ console.log(this); } };
o.foo() // will log o
var o2 = { {bar : {foo : function(){ console.log(this); } } };
o2.bar.foo() // will log o2.bar
如果没有对任何对象调用该函数,或者该函数不在函数内部,则它将指向全局对象窗口
当您这样做时:
var cyclic = {c: this};
var foo = {a: 10, b: 5, c:(this.a - this.b)};
您已经创建了一个名为cyclic的对象,该对象具有一个引用全局对象的属性c
同样,当您这样做时:
var cyclic = {c: this};
var foo = {a: 10, b: 5, c:(this.a - this.b)};
您可以创建一个具有引用全局对象的a和b属性的属性的对象
您可以做的一件事是创建一个init函数:
var foo = { a:10, b:5, init : function(){ this.c = this.a - this.b } };
要使其成为foo,只需将函数调用为foo.init
这不是文本对象,而是窗口,这取决于调用函数的方式;没有函数。如果你有一个用new调用的构造函数,不要返回对象文本!!!谢谢你的解释!我很高兴能帮助你,但你应该看看其他与你的问题非常相似的相关问题,以找到处理你的问题的其他方法。