【发布时间】:2012-02-13 08:15:17
【问题描述】:
谁能帮我解释一下为什么第一个例子有效,而第二个无效。
示例 1:
// Define a class
function Foo(name) {
var self = this;
this.name = name;
this.greeting = function() {
console.log('Hello ' + self.name);
}
}
var foo = new Foo('foo');
foo.greeting();
var greeting = foo.greeting;
greeting();
输出:
Hello foo
Hello foo
示例 2:
// Define a class
function Foo(name) {
this.name = name;
}
// Greeting
Foo.prototype.greeting= function () {
console.log('Hello ' + this.name);
}
var foo = new Foo('foo');
foo.greeting();
var greeting = foo.greeting;
greeting();
输出:
Hello foo
Hello undefined
我的猜测是因为第一个示例使用了闭包,所以它保留了对 name 局部变量的引用,但第二个示例没有,并且由于在没有对象上下文的情况下调用 greeting() 方法,它默认为undefined.
【问题讨论】:
标签: javascript class object closures