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

javascript:";这";在内部功能中

javascript:";这";在内部功能中,javascript,Javascript,我之前在jquery的上下文中发布了一个类似的问题,但是jquery对这个的内部处理让事情变得混乱。因此,为了保持简单明了,请考虑: function someCallbackFunction() { this.name = "Tom"; } anObject.method(someCallbackFunction); 当被“对象”调用时,someCallbackFunction的“this”指向什么 也就是说,当一个对象(在它的一个函数中)调用函数“somecallbackfunc

我之前在jquery的上下文中发布了一个类似的问题,但是jquery对
这个
的内部处理让事情变得混乱。因此,为了保持简单明了,请考虑:

function someCallbackFunction() {
    this.name = "Tom";
}

anObject.method(someCallbackFunction);
当被“对象”调用时,
someCallbackFunction
的“this”指向什么

也就是说,当一个对象(在它的一个函数中)调用函数“somecallbackfunction”时,(内部)“somecallbackfunction”的“this”指向什么?[不是“outer”(AnObject.function-当使用call或apply调用时,它当然指向一个对象或另一个调用函数)的“this”]

我认为它应该指向全局对象(
窗口
对象),因为闭包中的
将指向全局DOM
窗口
对象(在非严格模式下)或
未定义
(在严格模式下)。

尝试以下操作:

var self = this;
some callback function () {
    self.name = "Tom";
}

Object.function (some callback function);

这取决于调用函数的方式。
如果您像
mycallback()
那样调用它,
将引用
窗口
对象。 如果通过
mycallback.call(object)
(或
apply
)调用它,
将引用
对象


通常,“this”指向承载调用的方法的对象。(您可以通过function.call(thisObject,arg1,arg2)或function.apply(thisObject,[argList])重写此函数。)

一个简单的例子:

var myObject = {
  value: 1,
  report: function() {
    return "value: " + this.value;
  }
}

console.log( myObject.report() ); // "value: 1"
应该很清楚

使用构造函数和原型,它将是:

function Reporter(v) {
  this.value = v;
}

Reporter.prototype = {
  report: function() { return "value: " + this.value; }
};

var myObject = new Reporter(1);
console.log( myObject.report() ); // "value: 1"
也一样。”this'是通过调用“new Reporter(1)”创建的对象,原型中的'this'是指调用其方法“report()”的对象。 (只有在“myObject”中没有将方法“report()”定义为自己的属性时,原型才会起作用。)

现在有点嵌套:

function ComplexReporter(v) {
  this.value = v;
}

ComplexReporter.prototype = {
  report: function() { return "value: " + this.value; },
  utils: {
    innerReport: function() { return "value: " + this.value; }
  }
};

var myObject = new ComplexReporter(1);
console.log( myObject.report() ); // "value: 1"
console.log( myObject.utils.innerReport() ); // "value: undefined"
第一个调用如上所述,并提供预期结果

在第二个调用中,“this”不是预期的“myObject”,而是“myObject.prototype.utils”,它没有任何类型的属性@value。 这是有效的

ComplexReporter.prototype.utils.innerReport.apply( myObject.prototype.utils, [] );
因此,根据经验,“this”是在点表示法中调用对象的方法时,通过指向最后一个点之前的最后一个标识符的路径描述的实体

最后一个没有原型的示例(再次简化):

:“this”总是在函数被调用的那一刻进行计算(因此在构造闭包时不能保存“this”的上下文含义)

我希望,这些例子有助于理解“这”是如何工作的


注意:如果提供了对function.call()或function.apply()的调用的this对象未定义或为null,则全局对象(“self”,在与“window”相同的浏览器中)将用作“this”。

这取决于-调用回调的是什么?请发布一些真实的代码来演示此问题。对于你的伪代码,很难说出你有什么特别的问题,因为语法是非标准的。@tomatos
Object
只是一个原型。现在一个对象更有意义了吗?可能是重复的我知道你的答案有效,但我想知道这个
最初指向什么。是否使用DOM对象?4确定这是否有效最佳实践是_thissee yes I get that,但当对象(在其函数之一内)调用函数“some callback function”时,(内部)“some callback function”的
指向什么?[不是
this
的“outer”(AnObject.function-当使用call或apply调用时,它当然指向一个对象或另一个调用函数)]我刚刚回答了你。这取决于在方法
方法
中调用某个回调函数的方式。就像我刚才解释的那样:doxee,如果它是=anObject.method(anotherObject.someCallbackFunction),该怎么办;请看小提琴来得到答案:记住函数只是一个对象。因此,当调用
myobj.method(obj2.func)
时,只需传递一个函数(
func
)作为参数,而不是带有对象上下文的函数。
ComplexReporter.prototype.utils.innerReport.apply( myObject.prototype.utils, [] );
var myComplexObject = {
  value: 1,
  report: function() {
    return "value: " + this.value;
  },
  utils: {
    innerReport: function() {
      return "value: " + this.value;
    }
  }
}

console.log( myComplexObject.report() ); // "value: 1"
console.log( myComplexObject.utils.innerReport() ); // "value: undefined"
// same as myComplexObject.utils.innerReport.apply( myComplexObject.utils, [] );
console.log( myComplexObject.utils.innerReport.apply( myComplexObject, [] ) ); // "value: 1"