Javascript 访问属性调用()中的对象?

Javascript 访问属性调用()中的对象?,javascript,Javascript,有一个奇怪的问题-出于某种原因,使用call()方法访问属性内的父对象仅在函数内返回时有效 为什么在第二个示例中我不能访问MyObject,但在第一个示例中我可以访问 我需要让第二个开始工作,因为我不想经常在循环中调用函数,因为它很慢而且看起来很糟糕 我现在拥有的: var MyObject = { "selectorArray": ['[id*="example"]','[class*="example"]'], "all": function() { return

有一个奇怪的问题-出于某种原因,使用
call()
方法访问属性内的父对象仅在函数内返回时有效

为什么在第二个示例中我不能访问MyObject,但在第一个示例中我可以访问

我需要让第二个开始工作,因为我不想经常在循环中调用函数,因为它很慢而且看起来很糟糕

我现在拥有的:

var MyObject = { 
   "selectorArray": ['[id*="example"]','[class*="example"]'],
   "all": function() {
      return Array.prototype.slice.call(document.querySelectorAll(MyObject.selectorArray.join())); 
   },
   "somemethod": function () {
             for (var i = 0; i < MyObject.all().length; i++) {
                   MyObject.all()[i] // do something etc
             }
    }
    .. I need to use all() in loops other methods also
}
var MyObject={
“selectorArray”:['[id*=“示例”],'[class*=“示例”],
“全部”:函数(){
返回Array.prototype.slice.call(document.querySelectorAll(MyObject.selectorArray.join());
},
“somemethod”:函数(){
for(var i=0;i
我想要的(更快更好看)

var MyObject={
“selectorArray”:['[id*=“示例”],'[class*=“示例”],
“all”:Array.prototype.slice.call(document.querySelectorAll(MyObject.selectorArray.join()),
“somemethod”:函数(){
for(变量i=0;i正在计算对象文字时,MyObject不存在。您不能使用
MyObject.anything
在文本中定义
MyObject.all
的值,因为您引用的是尚未创建的对象的属性。相反,您可以从文本中提取所需的值:

var selectorArray = ['[id*="example"]','[class*="example"]'];
var MyObject = { 
   "selectorArray": selectorArray,
   "all": Array.prototype.slice.call(document.querySelectorAll(selectorArray.join())),
   "somemethod": function () {
             for (var i = 0; i < MyObject.all.length; i++) {
                   MyObject.all[i] // do something etc
             }
    }
    ...
};
var selectorary=['[id*=“example”],'[class*=“example”];
var MyObject={
“selectorArray”:selectorArray,
“all”:Array.prototype.slice.call(document.querySelectorAll(selectorArray.join()),
“somemethod”:函数(){
for(变量i=0;i正在计算对象文字时,MyObject不存在。您不能使用
MyObject.anything
在文本中定义
MyObject.all
的值,因为您引用的是尚未创建的对象的属性。相反,您可以从文本中提取所需的值:

var selectorArray = ['[id*="example"]','[class*="example"]'];
var MyObject = { 
   "selectorArray": selectorArray,
   "all": Array.prototype.slice.call(document.querySelectorAll(selectorArray.join())),
   "somemethod": function () {
             for (var i = 0; i < MyObject.all.length; i++) {
                   MyObject.all[i] // do something etc
             }
    }
    ...
};
var selectorary=['[id*=“example”],'[class*=“example”];
var MyObject={
“selectorArray”:selectorArray,
“all”:Array.prototype.slice.call(document.querySelectorAll(selectorArray.join()),
“somemethod”:函数(){
for(变量i=0;i
有趣-那么它为什么在方法内部工作呢?对象初始化后是否返回对象中的所有方法?因为,在创建对象时,
“somemethod”:function(){…}
仅将
somemethod
属性设置为函数,但函数在调用方法之前不会执行。因此,方法中对
MyObject
的引用在调用该方法之前不会被计算。@user2381114它在方法内部工作,因为,当实际需要并调用这些方法时,对象文本已被长期计算和创建。因此,方法内部的代码可以访问实际对象感谢AllInterest的回答和解释-那么它为什么在方法内部工作呢?对象初始化后是否返回对象中的所有方法?因为,在创建对象时,
“somemethod”:function(){…}
仅将
somemethod
属性设置为函数,但函数在调用方法之前不会执行。因此,方法中对
MyObject
的引用在调用该方法之前不会被计算。@user2381114它在方法内部工作,因为,当实际需要并调用这些方法时,对象文本已被长期计算和创建。因此,方法中的代码可以访问实际对象感谢您的回答和解释