0

当我声明一个新的对象类型时:

var MyType = function(constructorArg) {
    this.whatever = constructorArg;
};

var myTypeInstance = new MyType('hehe');

在这种情况下,this是指分配给 的功能MyType

现在让我们为属性添加一个简单的访问器whatever(不使用原型):

var MyType = function(constructorArg) {
    this.whatever = constructorArg;
    this.getWhatever = function() {
        // Here this should logically point to the function assigned
        // to this.whatever instead of the current instance of MyType.
        return this.whatever;
    };
};

这行得通吗?

但是,为什么this在分配给属性的函数体内whatever不指向该函数本身呢?

谢谢你的帮助 !

EDIT:我将修改我的示例:

var MyType = function(arg) {
    this.property = arg;
    this.MySubType = function(subTypeArg) {
        this.subTypeProperty = subTypeArg;
        // What is "this" refereing to here ?
        // To the instance of MyType, or to the instance of MySubType ?
        // I know it would not make sense to do something like this in real world
        // but i'm trying to have a clearer understanding of the way "this" is set.
    };
}

EDIT:正如评论中所说:

使用时

myTypeInstance.MySubType('hehe');

那么 this 指的是 myTypeInstance。

使用时

var mySubTypeInstance = new myTypeInstance.MySubType('hehe');

那么 this 指的是 mySubTypeInstance

如果我理解得很好。

4

2 回答 2

1

关于您的编辑,就像往常一样:这取决于您如何调用this.MySubType.

  • 如果您将其称为this.MySubType(),即作为对象方法,那么this(函数内部)将引用this(函数外部),它是MyType.

  • 如果你称它为new this.MySubType()then 它指的是MySubType.

  • 如果称它为this.MySubType.call(foo)this指的是foo

查看 MDN 文档,“函数上下文”部分

于 2013-07-29T12:56:11.987 回答
0

我认为不会在匿名函数中获得分配给它的新值。你可能想看看这个页面

  • 只能从外部函数中的语句访问内部函数。
  • 内部函数形成一个闭包:内部函数可以使用外部函数的参数和变量,而外部函数不能使用内部函数的参数和变量。

我的猜测是必须可以从内部函数内部访问,因此不会被覆盖。

编辑:我在打字时没有看到评论,Felix Kling 在他的评论中解释得更好。

于 2013-07-29T12:46:36.737 回答