类和构造函数
构造函数的 prototype 属性被用作新对象的原型。这就意味着通过同一个构造函数创建的所有对象都继承自同一个对象。
1 | function Person(name, age) { |
构造函数和类的标识
原型对象是类的唯一标识:当且仅当两个对象继承自同一个原型对象时,它们才是属于同一个类的实例。
1 | var base = { |
结果为 true
constructor属性
任何JavaScript函数都可以作为构造函数,并且调用构造函数需要用到一个prototype属性。因此每个函数都自动拥有一个prototype属性。这个属性的值是一个对象,这个对象包含唯一一个不可枚举属性constructor。constructor的值是一个函数对象。
1 | var F = function(){}; // 这是一个函数对象 |
结果为 true
上例中由于Person将原型指向一个新对象代替了默认的Person.prototype对象,这个新对象不含有contructor属性,所以Person的实例也不含有constructor属性。可以通过补救来修正它:
1 | Person.prototype = { |
显示的设置构造函数反向引用,或者:
1 | Person.prototype.speak = function(){ |
为原型对象添加方法。
在实践中,推荐使用后者。
Java式的类继承
P207