我很抱歉,我不知道有什么更好的方式来回答我的问题我知道这是正确的:
var cyclic = new Object();
cyclic.c = cyclic;而且这并不会破坏
var cyclic = {c: this};所以我想知道.为什么这个不起作用?
var foo = {a: 10, b: 5, c:(this.a - this.b)};是因为元素引用了在同一“级别”上的其他元素,还是我试图在一步内完成所有这些?有办法在一条线上做这种事吗?
发布于 2014-01-10 16:13:06
this并没有指出你认为它能做什么。在函数内部,this将指向调用函数的对象:
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如果函数没有在任何对象上调用,或者如果this不在函数中,那么它将指向全局对象window。
var foo = function() { console.log(this); };
foo(); // will log window
console.log(this) // will log window当你这样做时:
var cyclic = {c: this};您已经创建了一个名为循环的对象,它具有引用全局对象的属性c。
同样,当你这样做时:
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 } };要使this成为foo,只需将函数调用为foo.init()即可。
foo.init(); // adds the c property to foo, with the value foo.a-foo.b
console.log(foo.c);发布于 2014-01-10 16:05:45
this不是文字对象,而是window对象,因为不是用函数调用它。
您可以/应该为此使用构造函数,
请考虑下面的功能
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 https://stackoverflow.com/questions/21048822
复制相似问题