我有一个关于javascript规范或函数指针(委托?)的实现的一般性问题,它们指向对象方法.
请阅读以下代码段.这里我们有一个对象,使用'this'来访问对象字段.当我们像往常一样调用此方法时o.method();,返回对象的指定字段的值.但是当我们创建指向此方法的指针(回调)并调用它时,返回一个未定义的值,因为方法范围内的'this'现在是全局对象.
var o = {
field : 'value',
method : function() {
return this.field;
}
};
o.method(); // returns 'value'
var callback = o.method;
callback(); // returns 'undefined' cause 'this' is global object
Run Code Online (Sandbox Code Playgroud)
那么,我的'这个'在哪里?
我刚写了这段代码来表示这个错误就是杀了我(Grrr!)
我想知道为什么当我得到错误:方法未定义我已经检查了Safari并且这个变量在parserDidStart()方法中不是EpisodeController类型它是EpisodeFeedParser类型为什么这个?
<html>
<head>
<script type="text/javascript">
var EpisodeFeedParser = function(url){
this.url = url;
this.didStartCallback = null;
};
EpisodeFeedParser.prototype.parse = function(doc){
this.didStartCallback(this);
};
var EpisodeController = function(){
this.episodes = new Array();
this.parser = null; //lazy
};
EpisodeController.prototype.parserDidStart = function(parser){
console.log("here *this* is not of type EpisodeController but it is EpisodeFeedParser Why?");
this.testEpi(); //**********ERROR HERE!***********
};
EpisodeController.prototype.fetchEpisodes = function(urlString){
if(urlString !== undefined){
if(parser === undefined){
var parser = new EpisodeFeedParser(urlString);
parser.didStartCallback = this.parserDidStart;
this.parser = parser;
}
this.parser.parse();
}
}; …Run Code Online (Sandbox Code Playgroud)