博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于继承的prototype , _proto_, constructor
阅读量:5298 次
发布时间:2019-06-14

本文共 1326 字,大约阅读时间需要 4 分钟。

1. 最常见的组合式继承

function Parent(p){  this.p = p;} Parent.prototype.get = function() {   //注:prototype其中就是一个空对象{},但它是function特有的对象   return this.p;}function Child(c){   Parent.call(this,c);  //继承Parent的属性   this.c = 3;} Child.prototype = new Parent(); //现在,child.prototype对象就是Parent的实例,则里面含有 实例属性: p ,目前的值为 undefined,同时此时的                    //Child.prototype.constructor = Parent ; var c = new Child();  //在c中又会有一份 实例属性p ; 这是因为: 在new Parent的时候,调用了一次 Parent的构造函数; 当调用Child的构造函数的时候,又调用了一次Parent的构造函数,又会在新对象上创建实例属性 p ; 为了避免这种重复创建属性的过程, 可以选择1 :及时修正 Child.prototype = new Parent(); Child.prototype.constructor = Child;  //这可以避免 二次 创建,但是 一次创建的东西是 不会消失啦,也就是Child.prototype中保留着一份 实例属性 选择2 :改变继承方式:寄生组合式继承 function inheritPrototype( w, m) {
var p = Object(w.prototype); p.constructor = m; m.prototype = p; } //属性继承不变 function Child(c) {
Parent.call(this,c); this.c = c; } inheritPrototype( Parent ,Child ); 点评一下: 其实这个方法是先 偷梁换柱,再交还给 子类 选择3 :野生方法(好像不好看,不过很管用啊,可能效率有点低啦!) function Child( c) {
Parent.call(this,c); this.c = c; } for( var i in Parent.prototype ) {
Child.prototype[i] = Parent.prototype[i]; } 这样继承的话,Child.pototype.constructor 的值 还是Child 啦!而且Child.prototype中也不会有实例 属性 p; 其实,2、3差不多啦!

 

posted on
2016-03-01 22:41 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/shixiaomiao/p/5232813.html

你可能感兴趣的文章
python全栈开发基础【第五篇】Python可变数据类型和不可变数据类型
查看>>
poj-1410 Intersection
查看>>
Ubuntu 16.04 安装Mysql后,初始账号密码位置。
查看>>
艰难中前行
查看>>
[pytorch学习]1.pytorch ubuntu安装
查看>>
阿里云CentOS 安装配置ASPNET Core
查看>>
repeater 分页显示数据
查看>>
HDU-3666 THE MATRIX PROBLEM
查看>>
鼠标悬停放大图片 - 漂亮
查看>>
【转载】博士后了
查看>>
IDEA操作git的一些常用技巧
查看>>
Java多线程基础(一)
查看>>
TCP粘包拆包问题
查看>>
JAVA学习之开发环境配置
查看>>
Java中Runnable和Thread的区别
查看>>
C#通过webbrowser控件与javascript交互
查看>>
mongodb 的安装(Centor OS )
查看>>
设计模式之迭代器模式
查看>>
Android高效加载大图、多图解决方案,有效避免程序OOM
查看>>
git操作
查看>>