文档章节

js oop 继承

appleZ
 appleZ
发布于 2015/04/10 11:04
字数 368
阅读 25
收藏 0

1.原型链继承

    子类原型继承父类实例

    弊端:共享一个父类实例  不方便传参

2.借用构造函数继承

    使用 call apply 直接复制父类属性到子类构造函数中

    弊端:只能访问父类属性 不能访问父类原型链属性

3.组合继承(原型链继承 + 借用构造函数继承

    借用构造函数继承方法继承属性 子类原型指向父类实例用来借用原型链属性

    弊端:多次使用了相同的属性 不过也是相对可取的继承方式

4.原型继承

function object(o) {
    function F() {}
    F.prototype = o;
    return new F();
}

    直接指向对象(对象就没有了构造函数对象的限制) 不指向实例 (应该是没有父类原型链属性这一说)

    弊端:共享同一个对象 与1同样的弊端

5.寄生式继承

    直接给原型继承返回的实例添加属性进行本地属性包装

6.寄生组合继承 

    直接指向父类的原型 借用的都是原型链中的属性 

    再调用call apply 继承本地属性  比较完美的继承方式

综上:

    给出一个比较好的继承写法:

function extend(subType, superType){
	function F() {};
	F.prototype = superType.prototype;
	subType.prototype = new F();
	subType.prototype.constructor = subType;
}
function superClass(){
	this.name = "superClass";
}
superClass.prototype.test = function(){
	alert(this.name);
}
function subClass(){
	superClass.apply(this, arguments);
}
extend(subClass, superClass);
var sub = new subClass();
sub.test()


© 著作权归作者所有

共有 人打赏支持
appleZ
粉丝 1
博文 38
码字总数 9774
作品 0
深圳
JavaScript 私有成员

Class field declarations for JavaScript(JavaScript 类的字段声明)目前已经进入了 stage-3,其中包含一项 OOP 开发者都很关注的内容:Private fields。JavaScript 一直没有私有成员并不是...

边城__
08/13
0
0
JavaScript 的私有成员

Class field declarations for JavaScript(JavaScript 类的字段声明)目前已经进入了 stage-3,其中包含一项 OOP 开发者都很关注的内容:Private fields。JavaScript 一直没有私有成员并不是...

边城
08/13
0
0
js中的prototype和构造函数

js中没有类的感念,继承也是通过原型链来实现的对象的继承而不是类的继承 Vjeux写的这篇文章应该能帮助我们更好的理解js中原型的工作方式:http://blog.vjeux.com/2011/javascript/how-proto...

leo-H
2013/04/08
0
0
Stream上传插件(js设计)

1、概述 javascript是一种弱类型的语言,变量在运行的过程中可能从一种类型转变成另外一种类型,所以编码规范就非常重要了(stream.js主要参考网易的js命名规则:http://blog.jobbole.com/1...

java_speed
2013/11/29
0
18
《前端之路》之 JavaScript原型及原型链详解

05:JS 原型链 在 JavaScript 的世界中,万物皆对象! 但是这各种各样的对象其实具体来划分的话就 2 种。 一种是 ,剩下的就是 。其中 和 为JS自带的 。(哎? 等等, Function 为 函数对象 ...

SmallW
07/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
33分钟前
0
0
java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣
昨天
2
0
OSChina 周六乱弹 —— 目测我们程序员丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑
昨天
9
3
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
昨天
1
0
OpenCV边缘检测算子原理总结及实现

1. 拉普拉斯算子 原理:是一种基于图像导数运算的高通线性滤波器。它通过二阶导数来度量图像函数的曲率。 拉普拉斯算子是最简单的各向同性微分算子,它具有旋转不变性。一个二维图像函数的拉...

漫步当下
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部