js继承之二-----借用构造函数
2012-07-03 22:57
246 查看
在解决原型中包含引用类型值所来来问题的过程中,开发人员开始使用一种叫做借用构造(函数(constructor stealing)的技术。
这种技术的基本思想相当简单,即在子类型构造函数的内部调用超类型构造函数。别忘了,函数只补过时在特定环境中执行的
代码的对象,因此通过使用apply()和call()方法也可以在(将来)新创建的对象上执行构造函数,如下所示:
这样,SubType的每个实例就都会具有自己的colors属性的副本了。
1. 传递参数
相对于原型链而言,借用构造函数有一个很大的优势,即可以在子类型构造函数中向超类型构造函数传递参数。如下:
2. 借用构造函数的问题
如果仅借用构造函数,那么将无法避免构造函数模式存在的问题:方法都在构造函数中定义,因此函数复用就无从谈起。
且,超类型中定义的方法,对于子类型也是不可见的,结果所有类型都只能使用构造函数模式。
考虑到这些问题,借用构造函数的技术也是很少单独使用的。
这种技术的基本思想相当简单,即在子类型构造函数的内部调用超类型构造函数。别忘了,函数只补过时在特定环境中执行的
代码的对象,因此通过使用apply()和call()方法也可以在(将来)新创建的对象上执行构造函数,如下所示:
<script type="text/javascript"> function SuperType(){ this.colors = ["red","blue","green"]; } function SubType(){ //继承了SuperType SuperType.call(this); } var instance1 = new SubType(); instance1.colors.push("black"); alert(instance1.colors);//"red,blue,green,black" var instance2 = new SubType(); alert(instance2.colors);//"red,blue,green" </script>
这样,SubType的每个实例就都会具有自己的colors属性的副本了。
1. 传递参数
相对于原型链而言,借用构造函数有一个很大的优势,即可以在子类型构造函数中向超类型构造函数传递参数。如下:
<script type="text/javascript"> function SuperType(name){ this.name = name; } function SubType(){ //继承了SuperType,同时传递还传递了参数 SuperType.call(this,"Nicholas"); //实例属性;实例属性应些在上面语句之后,可以确保父类构造函数不会重写子类的属性。 this.age = 29; } var instance = new SubType(); alert(instance.name); alert(instance.age); </script>
2. 借用构造函数的问题
如果仅借用构造函数,那么将无法避免构造函数模式存在的问题:方法都在构造函数中定义,因此函数复用就无从谈起。
且,超类型中定义的方法,对于子类型也是不可见的,结果所有类型都只能使用构造函数模式。
考虑到这些问题,借用构造函数的技术也是很少单独使用的。
相关文章推荐
- JS继承之借用构造函数继承和组合继承
- 浅谈JS继承_借用构造函数 & 组合式继承
- JS原型链、继承的问题与解决:组合继承、借用构造函数(未完)
- JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)
- 浅谈js函数继承模式之二:借用模式
- JS继承之借用构造函数继承和组合继承
- JS继承之借用构造函数继承和组合继承
- JS 面向对象之继承 -- 借用构造函数
- 浅谈JS继承_借用构造函数 & 组合式继承
- Js面向对象漫谈(2) 继承--原型链,借用构造函数,组合式,寄生式, 寄生组合式
- js 继承 三种常用方法 原型链-借用构造函数-组合式继承
- js中借用构造函数实现继承
- javascript 的 继承(二) 之 借用构造函数继承
- javascript中继承(二)-----借用构造函数继承的个人理解
- javascript——混合继承(借用构造函数+原型继承)
- javascript继承之借用构造函数与原型
- js(javascript)中的借用构造函数
- 【C++继承与派生之二】有子对象的派生类的构造函数
- 借用构造函数继承非原型
- C++继承详解之二——派生类成员函数详解(函数隐藏、构造函数与兼容覆盖规则)