继承,ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的

构造函数、原型、和实例的关系:每个构造函数都有一个原型对象,每个原型对象都包含一个指向构造函数的指针,每个实例都包含一个指向原型对象的内部指针

如果我们让一个原型对象等于另一个类型的实例,会怎么样呢?这样的关系层层递进,就是继承

我们知道,所有的引用类型默认都继承了Object,这个继承也是通过原型链实现的,这也是所有自定义类型都会继承toString()、valueOf()等默认方法的根本原因

确定原型和实例的关系

1使用instanceof操作符,用来测试实例与原型链中 出现过的 构造函数,结果就会返回true

alert(str instanceof Object);  //true

alert(str instanceof SubType);  //true

2使用isPrototypeOf()方法,只要是在原型链中 出现过的 原型,都可以说是该原型链所派生的实例的原型,返回true

alert(Object.prototype.isPrototypeOf(str));  //true

原型链的问题是共享和不能传递参数

借用构造函数

借用构造函数,技术思想:在子类型构造函数内部调用超类型构造函数,函数只不过是在特定环境中执行代码的对象,因此可以通过使用apply()和call()方法在(将来)新创建的对象上执行构造函数

相对于原型链,借用构造函数有一个很大的优势,可以在子类型中向超类型构造函数传递参数

function SuperType(name){

    this.name=name;

}

function SubType(){

    SuperType.call(this,"Nicholas");

    this.age=29;

}

var instance=new SubType();

alert(instance.name);  //"Nicholas"

alert(instance.age);  //29

单独使用借用构造函数也是有问题的,函数的复用无从谈起

组合继承

组合继承便是将原型链与借用构造函数的长处添加在一起

思路:使用原型链实现对原型属性和方法的继承,通过借用构造函数实现对实例属性的继承

ECMAScript 5新增Object.create()方法规范了原型式继承,这个方法接受2个参数,第一个参数用作新对象原型的对象,第二个参数(可选)为新对象定义额外属性的对象

var person={

  name:"Nicholas",

  friends:["Shelby","Court","Van"]

};

var anotherPerson=Object.create(person,{

  name:{

    value:"Greg"

    }

});

alert(anotherPerson.name);  //"Greg"

最新文章

  1. Oracle如何导出sys用户下的系统表
  2. checkstyle配置文件说明
  3. 退役?OR 继续
  4. WPF MVVM实现TreeView
  5. 转 毛笔字教程ps
  6. curl批处理从官方demo封装
  7. 苹果教你六招:设计优秀的icon
  8. Protel99SE制作拼板的方法
  9. Blend4精选案例图解教程(三):一键拖拽
  10. LINQ to Entities does not recognize the method 'System.DateTime ToDateTime(System.String)' method
  11. re2c实例
  12. jquery插件简单的声明方法
  13. 【WiFi密码破解详细图文教程】ZOL仅此一份 详细介绍从CDlinux U盘启动到设置扫描破解-破解软件论坛-ZOL中关村在线
  14. PHP使用api的两种方法
  15. Java I/O---输入与输出
  16. 了解wireshark
  17. Jfinal调用Orcale存储过程
  18. MongoDB面试题
  19. Android ScrollView内部组件设置android:layout_height="fill_parent"无效的解决办法
  20. Nginx 防盗链 secure_link 模块

热门文章

  1. 分享:根据svg节点对象类型和路径值转换坐标值
  2. javascript创建对象(一)
  3. ios动力特效,最重要的一点 属性保持(写了动力特效但是没效果的原因就在这里)
  4. 【清橙A1084】【FFT】快速傅里叶变换
  5. hibernate中一对多 多对多 inverse cascade
  6. Zend Studio 11.0.2 破解和汉化
  7. Asp.net服务器控件在IE10下的不兼容问题
  8. WPF之 XAML集合项简单演示
  9. python 读入
  10. FutureTask源码解读