Javascript中的继承理解
来源:互联网 发布:java sql 格式化工具 编辑:程序博客网 时间:2024/04/18 07:24
// 浅谈原型链和javascript中的继承<script type="text/javascript">/*首先了解javascript中函数的作用:1. 作为一般函数调用2. 作为它原型对象的构造函数*//*eg: function a(){} 当我们创建一个函数时,会发生哪些步骤呢?1. 创建一个函数对象,也就是a2. 创建一个原型对象, 就是 a prototype3. 函数对象会有一个prototype指针指向原型对象,即指向a prototype4. 原型对象a prototype 会有一个construtor指针指向a5. 当访问对象属性时,函数对象会有_proto_指针指向原型对象 找到就返回值,没有找到就返回undefined */ //至此原型链的含义就出来了,由于原型对象也有一个_proto_指针, //又指向了另一个原型,一个接一个,就形成了原型链。 //Object.prototype是最顶层的原型,所以如果修改了Object.prototype的属性, //那么就影响了所有的对象。 //http://blog.csdn.net/ljl157011/article/details/19677059(原文) // //1.原型链继承 function Person(name,age){ this.name = name; this.age = age; } Person.prototype.say=function(){ console.log("Hello" + this.name); }; function Man(){} Man.prototype = new Person("ilv"); var man1 = new Man(); var man2 = new Man(); console.log(man1.say() == man2.say()); //true console.log(man1.name = man.name2); // true /* 这种继承方式很直接,子类的所有属性和方法都要去原型链上找, 因为找到的属性方法都是同一个 */ //2.利用构造函数继承 function Person(name,age){ this.name = name;this.age = age; } Person.prototype.say = function(){ console.log("Hello" + this.name); }; function Man(name,age){ Person.apply(this,arguments); } var man1 = new Man("ilv"); var man2 = new Man("ilv2"); console.log(man1.name = man.name2); //false man1.say() // 404 not found /* 比直接利用原型链去继承要好,至少每个实例都有属于自己的一份资源 但这种方法只能继承弗雷德实例属性,找不到say方法 */ //3. 组合继承 function Person(name,age){ this.name = name;this.age = age; } Person.prototype.say = function(){ console.log("Hello" + name); }; function Man(name,age){ Person.apply(this,arguments); } Man.prototype = new Person(); var man1 = new Man("ilv"); var man2 = new Man("ilv2"); console.log(man1.name === man2.name);//false console.log(man1.say === man2.say);//true man1.say(); //hello, my name is ilv man2.say(); //hello, my name is ilv2 //需要注意的是man1和man2的实例属性其实是覆盖了原型属性, //但是并没要覆盖掉原型上的say方法(因为它们没有), //所以这里man1.say === man2.say依然返回true, //因而需要十分小心没有覆盖掉的原型属性,因为它是所有实例共有的。 //寄生组合继承 。。。。说实话我还不咋懂这个 function Person (name, age) { this.name = name; this.age = age; }Person.prototype.say = function(){ console.log('hello, my name is ' + this.name);};function Man(name, age) { Person.apply(this, arguments);}Man.prototype = Object.create(Person.prototype);//a.Man.prototype.constructor = Man;//b.var man1 = new Man('pursue');var man2 = new Man('joe');console.log(man1.say == man2.say);console.log(man1.name == man2.name);</script>
阅读全文
0 0
- Javascript中的继承理解
- 关于JavaScript中的继承的一些理解
- JavaScript原型彻底理解2---继承中的原型链
- 深入理解Javascript中的原型、原型链、继承
- JavaScript原型彻底理解2---继承中的原型链
- JavaScript原型彻底理解2---继承中的原型链
- 轻松理解javascript继承
- JavaScript继承 画图理解
- JavaScript中的继承性
- JavaScript中的类继承
- JavaScript中的类继承
- JavaScript中的类继承
- JavaScript中的类继承
- JavaScript中的类继承
- javascript 中的继承
- JavaScript 中的继承
- javascript中的继承
- javascript 中的继承方式
- 转载:通过浏览器直接打开Android应用程序
- 个人SideProject列表
- [ARM-Linux开发]Linux open函数
- 解决Android SDK Manager更新、下载速度慢 (2)
- zookeeper原理
- Javascript中的继承理解
- 在线裁剪图片 Jcrop
- 树链剖分详解
- Android Studio使用Genymotion
- IntelliJ IDEA 14.0.2 死机重启后报前言中不允许有内容的BUG解决方法
- 不同版本的web.xml配置
- struts2 2.5使用通配符
- Java提高篇(二七)-----TreeMap
- 关于mybatis “org.apache.ibatis.binding.BindingException: Invalid bound statement (