`

今天再讲下js里的继承

 
阅读更多

js的继承说简单也很简单,请看:

 

function SuperClass(){
...
}

SuperClass.prototype.xxx = function(){...}
...

function SubClass(){
...
}

SubClass.prototype = new SuperClass();

 看着是不是很简单?不过问题来了。

 

//这句似乎改变了SubClass的constructor噢
SubClass.prototype = new SuperClass();

 怎么办?再加一句打个补丁哈。。

SubClass.prototype = new SuperClass();
SubClass.prototype.constructor = SubClass;

 这样看着好像完美都啦 :)

请慢!!!

//这里好像同样也覆盖了SubClass原来的原型函数噢,肿么办???
SubClass.prototype = new SuperClass();

 对了!先保存原来的原型函数,后面再恢复回来!具体的实现我就不写咯。。

到这里一切该结束了吧!!哼!一个继承用得着这么复杂么?

 

等等,大哥,这事还没完呢!

/**
 * 还是这一句!怎么又是你啊,麻烦真够多的:(
 * 这一句有一个隐藏的问题?想到了没。
 * SuperClass的构造器里也许有着很复杂的逻辑呢。比如:
 * 1.执行了一个超长时间的阻塞操作
 * 2.加载了大量的数据
 * 问题来了:CPU被白白的浪费了,内存也被白白的占用了
 * 我只是想继承你的原型方法而已嘛,你不用为我做这么多的实例化操作的...
 */
SubClass.prototype = new SuperClass();

 这可肿么办哈。。。

ecmascript5 提供了一个Object.create的方法,用在这里挺不错的,怎么做呢?

SubClass.prototype = Object.create(SuperClass.prototype);

 可是IE8好像还不支持耶。别急,那就这样来呗:

var F = new Function();
F.prototype = SuperClass.prototype;
...
SubClass.prototype = new F();//这下终于没有多余的实例化操作啦
...

 

然后把上面的点都连在一起就可以有一个不错的继承方法啦。。

分享到:
评论

相关推荐

    浅谈js对象的创建和对6种继承模式的理解和遐想

    本文将探讨JavaScript中对象的创建方式以及六种常见的继承模式,包括原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承以及寄生组合式继承。 首先,让我们从对象的创建开始谈起。在JavaScript中创建...

    JavaScript的原型继承详解

    这里讲的是JavaScript的继承,其他两个容后再讲。 JavaScript的继承和C++的继承不大一样,C++的继承是基于类的,而JavaScript的继承是基于原型的。 现在问题来了。 原型是什么?原型我们可以参照C++里的类,同样的...

    突破JavaScript编程实例五十讲 JavaScript精髓 JavaScript技巧

    本压缩包中的"突破JavaScript编程实例五十讲"旨在深入解析JavaScript的核心概念、最佳实践以及高级技巧,帮助开发者提升技能,掌握JavaScript的精髓。 第一讲:基础篇 1.1 数据类型:了解JavaScript中的基本数据...

    突破JavaScript编程实例五十讲

    《突破JavaScript编程实例五十讲》是一本专注于JavaScript实践应用的教程,旨在帮助开发者提升JavaScript编程技巧,通过五十个具体的实例来深入理解这门强大的脚本语言。这些实例涵盖了JavaScript的基础语法、面向...

    突破javascript编程实例五十讲

    《突破JavaScript编程实例五十讲》是一本专注于JavaScript编程实践的学习资料,旨在帮助初学者和有一定基础的开发者深入理解和掌握这门强大的脚本语言。通过五十个精心设计的实例,本书全面覆盖了JavaScript的基础...

    《突破JavaScript编程实例五十讲》源文件

    《突破JavaScript编程实例五十讲》是一本专注于JavaScript实践应用的书籍,其源文件包含了大量用于创建动态、交互式网页效果的代码示例。JavaScript是一种广泛使用的客户端脚本语言,它在网页开发中扮演着至关重要的...

    《突破JavaScript编程实例五十讲》

    《突破JavaScript编程实例五十讲》是一本专注于JavaScript编程实践的教程,旨在帮助读者通过实例学习和掌握这门广泛应用于Web开发的重要语言。本书的核心理念是将理论与实践相结合,通过五十个精心设计的实例,逐步...

    突破javascript50讲

    《突破JavaScript50讲》是一本深度解析JavaScript编程的教程,通过50个精心设计的实例,旨在帮助读者深入理解并掌握JavaScript的核心概念和技术。在JavaScript的世界里,无论是初学者还是有一定经验的开发者,都能...

    JavaScript编程实例五十讲

    原型链是JavaScript实现继承的方式,每个对象都有一个__proto__属性,指向其构造函数的原型对象。理解原型、原型链和构造函数能帮助你深入理解面向对象编程。 4. 控制流:包括条件语句(if...else,switch)和循环...

    javascript面向对象之Javascript 继承

    上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象的JavaScript类 、 JavaScript 面向对象的之私有成员和公开成员 与 Javascript 面向对象之重载,大家可以先看上面的再继续往下看。在JavaScript...

    JavaScript原型继承和原型链原理详解

    这篇文章主要介绍了JavaScript原型继承和原型链原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在讨论原型继承之前,先回顾一下关于创建自定义类型的...

    javascript编程五十讲

    JavaScript编程五十讲,这是一份深入探讨JavaScript编程的资源,旨在帮助学习者通过五十个具体的实例,全面理解和掌握JavaScript的核心概念和技术。JavaScript是一种广泛应用于Web开发的脚本语言,它在网页交互、...

    js-后4讲ppt与例题.zip

    在本压缩包"js-后4讲ppt与例题.zip"中,我们预计会涉及到JavaScript的高级特性,包括对象、函数、闭包、原型链、异步编程等核心概念。 1. **对象**:JavaScript的对象是键值对的集合,可以看作是关联数组。它允许...

    20天熟练掌握JS,从入门讲起,逐步精通

    本资源"20天熟练掌握JS,从入门讲起,逐步精通"旨在帮助初学者在短时间内系统学习并精通JavaScript。 在为期20天的学习计划中,你需要每天投入一定的时间来理解和实践JavaScript的基本概念与高级特性。这个过程将...

Global site tag (gtag.js) - Google Analytics