首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript对象中的横向指针

Javascript对象中的横向指针
EN

Stack Overflow用户
提问于 2014-01-10 16:01:01
回答 2查看 228关注 0票数 0

我很抱歉,我不知道有什么更好的方式来回答我的问题我知道这是正确的:

代码语言:javascript
复制
var cyclic = new Object();
cyclic.c = cyclic;

而且这并不会破坏

代码语言:javascript
复制
var cyclic = {c: this};

所以我想知道.为什么这个不起作用?

代码语言:javascript
复制
var foo = {a: 10, b: 5, c:(this.a - this.b)};

是因为元素引用了在同一“级别”上的其他元素,还是我试图在一步内完成所有这些?有办法在一条线上做这种事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-10 16:13:06

this并没有指出你认为它能做什么。在函数内部,this将指向调用函数的对象:

代码语言:javascript
复制
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

代码语言:javascript
复制
var foo = function() { console.log(this); };
foo(); // will log window
console.log(this) // will log window

当你这样做时:

代码语言:javascript
复制
var cyclic = {c: this};

您已经创建了一个名为循环的对象,它具有引用全局对象的属性c。

同样,当你这样做时:

代码语言:javascript
复制
var foo = {a: 10, b: 5, c:(this.a - this.b)};

创建具有引用全局对象的a和b属性的属性的对象。

您可以做的一件事是创建一个init函数:

代码语言:javascript
复制
var foo = { a:10, b:5, init : function(){ this.c = this.a - this.b } };

要使this成为foo,只需将函数调用为foo.init()即可。

代码语言:javascript
复制
foo.init(); // adds the c property to foo, with the value foo.a-foo.b
console.log(foo.c);
票数 0
EN

Stack Overflow用户

发布于 2014-01-10 16:05:45

this不是文字对象,而是window对象,因为不是用函数调用它。

您可以/应该为此使用构造函数,

请考虑下面的功能

代码语言:javascript
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21048822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档