首页 > 代码库 > javascript --- 只继承于原型
javascript --- 只继承于原型
正如上次所述,,出于效率考虑,我们应该尽可能的将一些可重用的属性和方法添加到原型中去。
如果养成了这个好习惯,我们仅仅依靠原型就能顺利的完成继承关系的构建了。
毕竟采用new her()方法将her的属性设为对象自身属性,这样的代码是不可重用的,我们可以利用下述方法提高一些效率。这节的内容上文已经提到,毕竟温故知新也是很重要的。
1. 不要单独为继承关系创建新对象。
2. 尽量减少运行时的方式方式搜索(例如toString());
下面就是优化后的代码,修改的地方加粗显示(可能会与上文不太一样,其实也是一样的,都是相通的):
function her(){}; her.prototype.name = ‘Anna‘; her.prototype.toString = function(){ return this.name;}function his(){}; his.prototype = her.prototype; his.prototype.constructor = his; his.prototype.name = ‘Jock‘;function child(width, height){ this.width = width; this.height = height;}child.prototype = his.prototype;child.prototype.constructor = child;child.prototype.name = ‘clo‘;child.prototype.doing = function(){ return this.width * this.height / 2}
测试结果依然相同:
var my = new child(10, 20); // 100
my.toString(); // clo
我们来看一下,my对象在调用toString()方法时究竟内部发生了神马与之前不一样的事情,首先,javascript引擎会查看my对象有没有这个方法,显然没有,然后又会找child对象的原型prototype,此时child的原型属性已经指向了his的原型属性,而his的原型属性又指向了her的原型属性。更为重要的是,在这里的属性传递是引用传递而不是值传递。
这里已经有过去讲到的4步,变成了简单的两步了。
这样一来,从效率上来说是快了不少,但你有没有想过她有她的副作用。由于子对象和父对象指向的是同一个对象,一旦子对象对原型做出了修改,父对象也会修改,甚至所有的继承关系都会如此。
child.prototype.name = ‘los‘;var a = new her();a.name; // los
所以,这种方法效率虽高,但不是任何场合都是适用的,即使用了这个方法,一定要留神那些同名的属性,是不是非常非常的累。。。。。。
javascript --- 只继承于原型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。