关于JavaScript中继承的深入理解
来源:才华咖 本文已影响2.89W人
来源:才华咖 本文已影响2.89W人
JavaScript中我们可以借助原型实现继承。
例如
function baz(){="";}function foo(){}otype=new baz();var myFoo=new foo();;
这样我们就可以访问到baz里的属性oo啦。在实际使用中这个样不行滴,由于原型的共享特点(数据保存在了堆上),
所有实例都使用一个原型,一但baz的属性有引用类型就悲剧了,一个实例修改了其他实例也都跟着变了wu
自然就有了组合式继承
function baz(){="";}=function(){}function foo(){(this);//第二次调用}otype=new baz();//第一次调用var myFoo=new foo();;;
这样就会有一个问题,代码里也表明出来了,baz会被调用两次,身为处女座的怎么可以允许呢..
插一句,第二种方式就不用出现第一种方式的问题吗?答案是不会的。
原因是属性的查找是先从对象自身开始,没找到才会去原型中去找,call时就把属性给继承了。
再插一句,那这样只使用call继承不就行了吗?如果不使用原型这个是可行的,但是作为处女座怎么能不使用原型呢,
在原型上方法是共享的,这样性能就好了很多呀。
寄生组合式继承
__extends=function (p,c){function ctor(){tructor=c;//赋值构造函数}otype=otype;otype=new ctor();}function baz(){=[1];}=function(){}__extends(baz,foo);function foo(){(this);}var myFoo=new foo();;;
这样不但解决了两次调用的`问题,还解决了对象调用构造函数时调用的是真实的创建对象的函数而不是原型链上其他的构造函数。
代码里有表明。
构造函数是原型对象上的一个属性,是对象的创建者。由于我们的原型属性被从新赋值了所以构造函数时继承来的。
这里要说一下,对象是怎样创建,也就是new都干了些什么。
例如:
var a=new b();
其实是这样的,a={};创建了一个给a,然后(a);call里初始化a,在call之前还有一步,就是a的内部原型对象
设置为b的原型属性指向的原型对象。原型上有构造函数属性,构造函数用来创建对象分配内存控件。
大概就这些...看看时间也不早了,碎吧,保持平和的心态切勿浮躁,努力去改变明天,希望一切都会慢慢变好。
深入理解Javascript中自执行匿名函数
有关深入理解JavaScript中的并行处理的介绍
Javascript 继承实现例子参考
浅谈如何深入学习Javascript中的this关键字
浅谈javascript深入理解js闭包
深入理解javaScript中事件驱动
关于JavaScript中call()和apply() 的一些理解
javascript的六种继承方式
java与javascript之间json格式数据互转详解
理解JavaScript中的封装与继承特性
关于javascript 原型链维护和继承详解
深入理解JS实现快速排序和去重javascript技巧
深入学习Javascript中的this关键字
Java Tomcat和激活MyEclips的深入理解
javascript作用域和闭包的深入理解
JavaScript中的原型链prototype详解
对Java中HashMap和TreeMap的区别的深入理解
JavaScript与java语言的区别
关于JavaScript substring()的使用方法
JavaScript JS入门详细教程
关于javascript中apply()和call()方法的区别
关于JavaScript中继承的深入理解
理解Javascript对象
Javascript入门学习js函数
理解Javascript 的闭包简介
JavaScript中创建字典对象(dictionary)的实例
如何灵活的理解JavaScript中的this指向
继承的解释及造句
浅谈javascript中的单线程理解
关于 response方法的javascript asp教程第六课
javascript中String对象的slice()方法
关于继承红色传统的作文
javascript中setInterval的用法总结
QT理解JavaScript原型
详解javascript中void0的具体含义
JavaScript中的style.cssText使用教程分解
关于JavaScript中的传值与传引用的理解
关于继承人的名言
正确理解Javascript闭包
对javascript的理解