为什么这样行得通……
function Person(name) {
this.name = name;
}
Person.prototype.speak = function() {
alert(this.name);
}
var person = new Person("fred");
person.speak();
但不是这个..
function Person(name) {
this.name = name;
speak = function() {
alert(this.name);
}
var person = new Person("fred");
person.speak();
我不理解继承是如何工作的,也不理解javascript的“原型链”。
谢谢。
发布于 2012-06-18 16:47:58
function Person(name) {
this.name = name;
speak = function() {
alert(this.name);
}
应该是
function Person(name) {
this.name = name;
this.speak = function () {
alert(this.name);
};
}
发布于 2012-06-18 16:50:39
实际上这是你不理解的变量作用域。
function Person(name) {
this.name = name;
speak = function() {
alert(this.name);
}
}
通过在这里的speak = ...
之前省略var
,您已经创建了一个名为speak
的全局变量,而不是Person
作用域内的变量。在浏览器中,全局变量附加到全局对象window
,因此您的代码等同于:
function Person( name ) {
this.name = name;
window.speak = function() { alert( this.name ); }
}
Douglas Crockford写了关于原型继承中的变量作用域的some related material,你会发现这对你很有启发。
https://stackoverflow.com/questions/11087374
复制