原型继承、构造函数继承
来源:互联网 发布:手机淘宝昵称怎么修改 编辑:程序博客网 时间:2024/05/18 00:17
JavaScript的继承
function A(name){ this.name = name;}A.prototype.sayName = function(){ console.log(this.name);}function B(age){ this.age = age;}
原型继承
B.prototype = new A("mbj");// 被B的实例共享var foo = new B(18);foo.age;//18,age是本身携带的属性foo.name; //mbj,等价于foo.__proto__.namefoo.sayName(); //mbj,等价于foo.__proto__.proto__.sayName()foo.toString(); //"[object Object]",等价于foo.__proto__.__proto__.__proto__.toString();
这样B通过原型继承了A,在new B的时候,
foo中有个隐藏的属性proto指向构造函数的prototype对象,在这里是A对象实例,
A对象里面也有一个隐藏的属性proto,指向A构造函数的prototype对象,这个对象里面又有一个proto指向Object的prototype
第一个缺点是所有子类共享父类实例,如果某一个子类修改了父类,其他的子类在继承的时候,会造成意想不到的后果。
第二个缺点是在构造子类实例的时候,不能给父类传递参数。
构造函数继承
function B(age,name){ this.age=age;A.call(this,name); }var foo=new B(18,"wmy");foo.name; //wmyfoo.age; //18foo.sayName(); //undefined
采用这种方式继承是把A中的属性加到this上面,这样name相当于就是B的属性,sayName不在A的构造函数中,所以访问不到sayName。
缺点是父类的prototype中的函数不能复用。
原型继承+构造函数继承
function B(age,name){ this.age=age;A.call(this,name); }B.prototype=new A("mbj");var foo=new B(18,"wmy");foo.name; //wmyfoo.age; //18foo.sayName(); //wmy
这样就可以成功访问sayName函数了,结合了上述两种方式的优点.
缺点,那就是占用的空间更大了
0 0
- 原型继承、构造函数继承
- javascript继承,原型链继承、借用构造函数、组合继承
- js构造函数,原型对象,继承 (1)
- js构造函数,原型对象,继承 (2)
- js构造函数,原型对象,继承 (3)
- Js中的对象、构造函数、原型、原型链及继承
- js中的构造函数,原型,原型链,继承
- Js中的对象、构造函数、原型、原型链及继承
- 构造函数+原型混合方式实现js的继承
- 构造函数与原型以及原型式继承
- 原型链的继承都发生在构造函数上
- 2.只继承原型(构造函数.prototype)
- js继承 原型链+构造函数+组合继承法
- JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
- javascript——混合继承(借用构造函数+原型继承)
- 原型链和构造函数技术组合到一起的组合继承(类继承)
- js 继承 三种常用方法 原型链-借用构造函数-组合式继承
- JS原型链、继承的问题与解决:组合继承、借用构造函数(未完)
- 数据库——游标
- 网站统计中的数据收集原理及实现(有说前端如何埋点)
- JAVA动态代理模拟
- 队列和栈
- Python模块结构与布局操作实例
- 原型继承、构造函数继承
- nuwa总结
- 数字图像处理-频率域滤波原理
- 非递归式(zkw)线段树详解(一)
- thinkphp5常用的使用方式
- 第三次HTML作业
- eclipse配置jdk
- 消息队列设计精要
- WebService