相关疑难解决方法(0)

我的'这个'在哪里?使用objects方法作为回调函数

我有一个关于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)

那么,我的'这个'在哪里?

javascript oop pointers callback

6
推荐指数
1
解决办法
771
查看次数

为什么*这个*不是*这*?

我刚写了这段代码来表示这个错误就是杀了我(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)

javascript scope this

6
推荐指数
1
解决办法
322
查看次数

标签 统计

javascript ×2

callback ×1

oop ×1

pointers ×1

scope ×1

this ×1