javascript - JS 关闭怪异

标签 javascript inheritance

我正在尝试从函数设置对象的属性:

function createObject(){
    var self={};
    self.foo=function(){
        this.wheatly="apple";
    }
    return self;
}

问题是,当我调用 self.foo() 时,'this' 指的是函数对象 (self.foo),而不是父对象 (self)。 如何我强制函数设置父级的属性? stackoverflow 上有很多类似的问题,但作者继续使用这个“闭包”的东西,这应该适用于这里???

编辑:

我忘了提到该函数是异步调用的,所以这里有一个更好的例子: http://jsfiddle.net/Pj59q/ 让我困惑的是控制台(chrome)说 this是一个 XMLHttpRequest (大概是 self.ajax 中声明的)。是this关键字仅指称为该函数的任何对象?

最佳答案

x = createObject()
>> Object {foo: function}

x.foo()
x
>> Object {foo: function, wheatly: "apple"}

那么,问题出在哪里呢?这是预期的行为。顺便说一句,这与闭包无关。

更新

看来您没有提供所有必要的信息。您需要将传递给 ajax 调用的回调绑定(bind)起来,以便它知道 this 应该是什么:

r.onload=this.foo.bind(this);

顺便说一句,您构建 createObject 的方式有点奇怪。更惯用的是:

function createObject(){
    return {
        foo: function() {
            this.wheatly="apple";
        }
    };
}

关于javascript - JS 关闭怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23861967/

相关文章:

javascript - 添加和删​​除类

javascript - 如何在 sequelize node.js 中的现有模型中添加多对多关联?

javascript - 来自多个来源的 jQuery 动画 - 影响多个对象

java显式调用super方法

java - 防止子类添加方法

java - 如何从post请求中获取数据?

JavaScript 方法调用只能使用 ScriptManager 调用一次

java - 如何将抽象类编写为接口(interface)

java - 通过 java 中的继承为不同的实现重用算法逻辑

c++ - 什么是正确的设计方法?