用原型实现javascript中的继承
做了三年php,因为工作需要,目前要转javascript。前段时间去面试的时候遇到在javascript中实现继承的题,当时答的也不好,回来找了些资料,做个整理。
《javascript语言精粹》一书是提到了一点,使用伪类的方式来实现继承,大概就是构造一个伪类继承自基类,然后再定义它的constructor函数,并替换它的prototype为一个基类的实例来实现,但是这样就会有很多"无谓的"prototype操作细节。
Function.method('new', function(){ // 创建一个新对象,它继承自构造函数的原型对象 var that = Object.beget(this.prototype); // 调用构造函数,绑定this到新对象上 var other = this.apply(that, arguments); // 如果返回的不是一个对象,就返回这个新对象 return (typeof other === 'object' && other) || that; }); // 定义一个构造函数并扩充它的原型 var Mammal = function(name){ this.name = name; }; Mammal.prototype.get_name = function(){ return this.name; }; Mammal.prototype.says = function(){ return this.saying || ''; }; // 构造一个实例 var myMammal = new Mammal('Herb the Mammal'); var name = myMammal.get_name(); var Cat = function(name){ this.name = name; this.saying = 'meow'; }; // 替换Cat.prototype为一个新的Mammal实例 Cat.prototype = new Mammal(); // 扩充原型对象,增加方法 Cat.prototype.eat = function(){ // other }; Cat.prototype.get_name = function(){ // other }; var myCat = new Cat('mimi'); var says = myCat.says(); // 'meow' var name = myCat.get_name(); myCat.eat();
相关推荐
softwear 2020-08-21
ZGCdemo 2020-08-16
northwindx 2020-05-31
zrtlin 2020-11-09
xuebingnan 2020-11-05
wikiwater 2020-10-27
heheeheh 2020-10-19
Crazyshark 2020-09-15
jczwilliam 2020-08-16
littleFatty 2020-08-16
idning 2020-08-03
jinxiutong 2020-07-26
lanzhusiyu 2020-07-19
Skyline 2020-07-04
xiaofanguan 2020-06-25
Aveiox 2020-06-23