Javascript 此作用域位于对象文字内
在这个简单的例子中,如何简单地引用Javascript 此作用域位于对象文字内,javascript,jquery,Javascript,Jquery,在这个简单的例子中,如何简单地引用这个(obj)?(在这种情况下,使用obj.literal) 我也试着让这样做:这个,但是再次在内部对象中是未定义的不要使用对象文字,使用函数方法 var Obj = function(){ var self = this; //store self reference in a variable self.planet = "World!", // ok, let's use this planet! self.text = {
这个
(obj)?(在这种情况下,使用obj.literal)
我也试着让
这样做:这个,
但是再次在内部对象中是未定义的
不要使用对象文字,使用函数方法
var Obj = function(){
var self = this; //store self reference in a variable
self.planet = "World!", // ok, let's use this planet!
self.text = {
hi: "Hello ",
pl: self.planet
};
self.logTitle = function(){
console.log( self.text.hi +''+ self.planet );
}
};
var obj = new Obj();
console.log( obj.text.hi +''+ obj.text.pl );
obj.logTitle();
以下是正在使用的JSFIDLE:
阅读关于面向对象Javascript的伟大MDN文章。当执行
pl:this.planet
时,执行范围是创建obj
的方法的范围,因此此
指向创建者上下文…属性访问对范围没有任何作用,只有方法调用change此
。(或Function.apply()
,Function.call()
,间接地Function.bind()
)您“继承”了外部上下文的这个
。我知道,但是。。。即使我创建了一个像那样的函数:function(){return this;},
在内部文本{}
对象中-仍然是未定义的这个
真的快把我逼疯了…:(在初始化obj
之前,您不能引用obj
的属性,因此您可能必须先初始化obj
,然后添加类似obj.text.pl=obj.planet
的属性,我不确定您试图实现什么,但如果您可以直接获得obj.planet
的引用,为什么要尝试访问使用obj.text.pl
的ame对象?此模式有名称吗?我见过它被使用过(这是一个很好的示例),但我记不起它是否有特定的名称。@BenM它是一个构造函数。对不起,我应该更具体一些。我指的是将“this”赋值给“self”或“that”等变量的行为并使用该变量访问顶级函数的闭包,访问顶级函数中定义的函数。@Benm我不知道这种方法有任何命名,我也看到了它的作用,并很快采用了它,因为它解决了在新创建的匿名函数上丢失此关键字作用域的问题。
var Obj = function(){
var self = this; //store self reference in a variable
self.planet = "World!", // ok, let's use this planet!
self.text = {
hi: "Hello ",
pl: self.planet
};
self.logTitle = function(){
console.log( self.text.hi +''+ self.planet );
}
};
var obj = new Obj();
console.log( obj.text.hi +''+ obj.text.pl );
obj.logTitle();