js 原型(prototype) 继承相关
来源:互联网 发布:极乐净土相机数据 编辑:程序博客网 时间:2024/05/22 16:38
这两天还是在看js 继承这块,打算一鼓作气继续咯 - -。
话说:我们通过直接使用原型继承的方式来实现了继承,来,简单回顾一下代码:
function SuperType(){ this.property = true;}SuperType.prototype.getSuperValue = function(){ return this.property;}funcion SubType(){ this.subProperty = false;}SubType.prototype = new SuperType();...
ok,通过以上这种方式实现了继承,然后世界完美了,有构造函数有继承,,然后问题出现了,“科学”只能不断前进。
这种方式存在的问题是,对于简单的值类型,继承过程中,可能还可以正常使用,但是一旦有了引用类型,那么。嗯,看代码再说咯:
function SuperType() { this.colors = ["red", "blue", "green"];}function SubType() {}SubType.prototype = new SuperType();var instance1 = new SubType();instance1.colors.push("black");alert(instance1.colors);//red,blue,green,blackvar instance2 = new SubType();alert(instance2.colors); //red,blue,green,black
ok,我觉得吧,这种结果有一大半都不是你想要的,instance1的push影响到了instance2的结果,也就是说colors成为了一个共享的属性。从某种意义上说,违背了我们当初的语意【之所以将colors放置在构造函数中而不是原型prototype对象中,说明我们是不希望这个属性被共享的】。
那么,显然,我们得继续改进。。。
于是,不久之后【聪明人太多了,没办法】,出现了这种模式【借用构造函数】,还是用代码说话:
function SuperType(){ this.colors = ["red","blue","green"];}function SubType(){ **SuperType.call(this);**}var instance1 = new SubType();instance1.colors.push("black");alert(instance1.colors);//red,blue,green,blackvar instance2 = new SubType();alert(instance2.colors);//red,blue,green
嗯,这次是我们想要的了吧,是的。输出的结果确实和我们所想的一样【这个比较简单,注意**标识那句,其实和有”类“的OO语言很接近了,子类构造函数先调用父类构造函数。。。扯远了】
function SuperType(color) {this.colors = ["red", "blue", "green"]; if(color){ this.colors.push(color); }}function SubType(color) { SuperType.call(this,color);}var instance1 = new SubType("black");//instance1.colors.push("black");alert(instance1.colors);var instance2 = new SubType();alert(instance2.colors);
嗯,自然也可以传递参数咯
其实吧,有问题吖,什么问题,发现了木有,我在说借用构造函数的时候,木有提到定义方法。是吖,如果提到了,很可能就跑到下一个模式了【至少我此时是真这么想的】,先把当前这个【借用构造函数模式】补充完整吧。对于方法的定义,借用构造函数模式是在构造函数中定义的。
function SuperType(name){ this.name = name; this.getName = function(){return this.name}}
这样子的话,,,,每个对象都会存在具有一个函数副本,造成浪费。【ps,这一章本人看的很痛苦,为什么呢?因为每次学习一个模式,就会发现它有不足,然后,新的模式出现了,当然了这样可以更好的理解,然而,当你提前翻看了后面,再回来时,就痛苦了,就比如借用构造函数模式,,,你看过我之前文章可能就会在想,干嘛不用原型prototype来共享函数啊,没错,这就又引出了下一个模式。。。–)】
感觉有点不太舒服,剩下的一些模式,在接下来的博客中给出。
- js 原型(prototype) 继承相关
- js 原型(prototype)继承相关2
- js 继承【 原型(prototype)】
- js 原型继承 Prototype
- js prototype 原型继承问题
- js的原型(prototype)的相关笔记(一)
- Javascript深度学习(js执行过程、js继承方式、__proto__、prototype、原型与原型链)
- JS 原型(prototype)详解
- js实现继承的练习 prototype原型继承
- javascript原型继承分析(prototype)
- javascript原型继承分析(prototype)
- Prototype 原型继承
- javascript prototype原型继承
- JavaScript中的prototype(原型)相关问题
- js:深入prototype(下:原型重写)
- js 动态原型(prototype)模式
- #JS#原型链(prototype chain)
- 趣谈js中的原型(prototype)
- 爸爸去哪儿4对父子在圆桌上共有多少种坐法
- 数据库集群
- MySQL查询结果导出到文件
- Spring3.1新特性
- eclipse快捷键大全
- js 原型(prototype) 继承相关
- bootstrap link
- DOCKER_HOST have a weird tcp
- VS 2010 openCV 错误:应用程序无法正常启动0xc000007b
- google play app下载方法测试
- 用两个栈实现一个队列和用两个队列实现一个栈
- SVN分支的合并深度 Depth
- SQL 當月上月月初月末
- SecureCTR连接服务器