码迷,mamicode.com
首页 > 编程语言 > 详细

javascript原型式继承

时间:2015-04-03 12:50:12      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

之前的文章里有提到过javascript类式继承,那种继承方式极大的方便了其他语言(非javascript)程序员使用javascript来实现继承,但是有缺点,就是建立了一个非必要的构造函数,那这篇文章我们来谈一谈具有javascript自身特色的原型式继承。

我们先来看一看下面的代码:

var Car = {
    color: ‘red‘,
    size: ‘big‘,
    getAttr: function() {
        return this.color
    }
}

var car1 = Object.create(Car)
car1.color = ‘blue‘
car1.brand = ‘BYD‘
console.log(car1.color) //blue
console.log(car1.brand) //BYD
console.log(Car.color) //red
console.log(Car.brand) //undefined

var car2 = Object.create(Car)
car2.getAttr = function() {
    return this.size
}
console.log(car2.getAttr()) //big
console.log(Car.getAttr()) //red
console.log(car1.getAttr()) //blue

上面的代码就是原型式继承最简单的方式,“子类”继承了“父类”的属性,修改“子类”的属性也没有影响到“父类”,“子类”之间也是相安无事互不干扰,完美实现了继承。这样继承的好处就是比类式继承少了一层构造函数

当然create这个方法是es5中出现的,ie6 7 8是不支持的哦,下面是一个兼容的方法,让低版本ie也来实现create。

 

if (!Object.create) {
    Object.create = function(o) {
        function F() {}
        F.prototype = o
        return new F()
    }
}

上述代码的意思就是,首先声明一个构造函数,该构造函数的原型指向需要继承的对象,最后返回实例化后的构造函数,其实这个函数也很好的诠释了原型式继承的原理,“父类”的属性存在于“子类”的原型上,如果“子类”自己重写了属性或者方法,那就直接用“子类”自身的属性或者方法,并且不会影响到“父类”,如果调用了“子类”没有的属性或者方法,那么由于原型链,我们顺藤摸瓜就找到了“父类”的属性或方法,如果再没有就game over了。

其实两种继承方式大同小异,玩的都是原型链,只是原型式继承更符合javascript的语言特点,类式继承更偏向于“类”的概念。

 

javascript原型式继承

标签:

原文地址:http://www.cnblogs.com/junhua/p/4389091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!