开发者问题收集

使用 JavaScript 原型继承

2012-06-18
144

为什么此功能...

734840712

但不是这个..

151638261

我不了解继承的工作原理或JavaScript“原型链”。

谢谢。

2个回答
function Person(name) {
   this.name = name;
        speak =  function() {
   alert(this.name);
}

应为

function Person(name) {
   this.name = name;
   this.speak = function () {
      alert(this.name);
   };
}
Domenic
2012-06-18

实际上,您不理解的是变量范围。

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 撰写了 一些相关材料 ,关于原型继承中的变量范围,您应该会觉得很有启发。

Jordan Running
2012-06-18