Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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/2/jquery/78.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_Jquery - Fatal编程技术网

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();