Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript对象中的横向指针_Javascript_Oop - Fatal编程技术网

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调用的构造函数,不要返回对象文本!!!谢谢你的解释!我很高兴能帮助你,但你应该看看其他与你的问题非常相似的相关问题,以找到处理你的问题的其他方法。