【发布时间】:2016-10-15 16:05:38
【问题描述】:
我是 javascript 编程的新手。最近,我在我的 javascript 旅程中遇到了一个让我感到困惑的问题。 我想创建一个 Teacher() 构造函数,它继承了 Person() 构造函数的所有成员。
首先,我创建 Person() 如下
function Person(name) {
this.name = name;
};
Person.prototype.greeting = function() {
alert('Hi! I\'m ' + this.name + '.');
};
其次,我从 Person() 创建 Teacher()。
function Teacher(name){
Person.call(this,name);
};
问题来了:
当我尝试设置 Teacher() 的原型时,我很困惑,以下两种做法似乎是相同的。但是,我认为它们必须有一些区别。 我先写如下:
Teacher.prototype = Object.create(Person.prototype);
按照上面的写法,我认为Teacher.prototype应该等于Person.prototype,结果证明是错误的:
Teacher.prototype === Person.prototype;//=>false
但是,Teacher()的实例teacherA成功地从Person()继承了greeting方法:
var teacherA = new Teacher();
teacherA.name = 'Kyle';
teacherA.greeting();//=>Hi!I'm Kyle.
然后我尝试更改我的代码如下,使 Teacher() 的原型属性等于 Person() 的原型属性:
Teacher.prototype = Person.prototype;
Teacher.prototype === Person.prototype;//=>true
当然,TeacherB 的另一个实例 Teacher() 也继承了 Person() 的 greeting 方法:
var teacherB = new Teacher();
teacherB.name = 'Jane';
teacherB.greeting();//=>Hi!I'm Jane.
任何人都可以告诉我为什么这两种做法都使继承成功,但是在两种情况下,Teacher.prototype不等于Person.prototype,而在另一种情况下则相反?谢谢!
【问题讨论】:
标签: javascript inheritance prototype