// Returns true if the last character is c String.prototype.endsWith = function(c) { return (c == this.charAt(this.length - 1)) }
看过上段代码的同学,相信在代码附近也看到了warning:* 反对使用自己的方法来扩展内建类型*。
在《Javascript权威指南》第五版一书中,列出了一个继承需要的步骤,或许读起来不是特别理解。那就从源头开始,看看为什么 继承一个父类需要什么步骤。我这里说的源头是"constructor"。
看看下段话,摘自《JavaScript权威指南》:
new操作符和构造函数,用来创建了一个新的对象,然后把构造函数作为这个对象的一个方法来调用。 除此之外,在创建这个空对象以后,new设置这个对象的原型。这个对象的原型就是构造函数的prototype 属性的值,并且这个prototype的初始化值是一个对象,只带有一个属性constructor,其值就是构造函数。
根据上面一段话,就可以将
var a = new A();
翻译成
var a = {}; A.call(a); /* If A inherit from object, A.prototype = new Object(); A.prototype.consturctor = A; */ a.prototype = A.prototype;
那如果想写一个子类B继承父类A,需要的步骤跟上面很类似:
}
- function B() {
- A.call(this); /* other initialize code */
B.prototype = new A(); B.prototype.constructor = B;
/* If need, delete some attribute you don't want to inherit */ delete B.prototype.xx;
References & Resources:
- JavaScript权威指南
没有评论:
发表评论