您的位置:首页 > Web前端 > JavaScript

js继承之二-----借用构造函数

2012-07-03 22:57 246 查看
在解决原型中包含引用类型值所来来问题的过程中,开发人员开始使用一种叫做借用构造(函数(constructor stealing)的技术。

这种技术的基本思想相当简单,即在子类型构造函数的内部调用超类型构造函数。别忘了,函数只补过时在特定环境中执行的

代码的对象,因此通过使用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. 借用构造函数的问题

如果仅借用构造函数,那么将无法避免构造函数模式存在的问题:方法都在构造函数中定义,因此函数复用就无从谈起。

且,超类型中定义的方法,对于子类型也是不可见的,结果所有类型都只能使用构造函数模式。

考虑到这些问题,借用构造函数的技术也是很少单独使用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: