浅谈Javascript继承的实现方法

浅谈Javascript继承的实现方法
S1中的一切都是对象。如果我们想继承父对象的属性方法,我们首先要做什么考虑到原型的概念,我首先继承了它。
函数父(){
这名'123;
}
母。原型。getName =函数(){
返回this.name;
}
函数子(){
这个年龄= 20岁;
}
子原型=新父();
儿子。原型。getAge =函数(){
返回this.age;
}
var子=新子();
console.log('name:+儿子。getName)(年龄)(+ son.getage +;);
vm1777:16名称:123;年龄:20
从上面我们可以看到父母的遗产是重写原型的儿子,父母的属性和方法对儿子的原型,所以在新的(子)通过对象的结构是从父对象{母}继承的属性和方法的原型,从而达到遗传效应;但这会带来一个副作用,就是当父对象包含一个引用类型的属性,对数据的变化将影响所有类型的对象引用的子对象,显然这不是我们想要的结果:
函数父(){
这名'123;
这水果= { 'apple'};
}
母。原型。getName =函数(){
返回this.name;
}
函数子(){
这个年龄= 20岁;
}
子原型=新父();
儿子。原型。getAge =函数(){
返回this.age;
}
var子=新子();
VaR歌=新的儿子();
Console.log(儿子。水果); / / 苹果} {
console.log(歌。水果); / / 苹果} {
Son.fruits.push('pear);
Console.log(儿子。水果); / / {苹果
console.log(歌。水果); / / {苹果
S2:现在要解决这个问题,使每个子对象有一个拷贝的父对象的属性,所以修改属性修改子对象的属性而不影响其他子对象的属性。实现这一目标的实现的方式模仿前人的对象。
函数父(){
这名'123;
这水果= { 'apple'};
}
母。原型。getName =函数(){
返回this.name;
}
函数子(){
parent.call(本);
这个年龄= 20岁;
}
子原型=新父();
儿子。原型。getAge =函数(){
返回this.age;
}
var子=新子();
VaR歌=新的儿子();
Console.log(儿子。水果); / / 苹果} {
console.log(歌。水果); / / 苹果} {
Son.fruits.push('pear);
Console.log(儿子。水果); / / {苹果
console.log(歌。水果); / / 苹果} {
在我的儿子parent.call功能(这个)新的儿子(这{)当新出的子对象}冒充背景这母函数调用父()函数,从而得到一份对父对象的属性和方法,这样的属性和方法的家长对象来修改下修改的副本时,那么所有子对象不会影响结果。然而,由于儿子的使用。原型=新的父(),我们得到的属性和方法的两个例子。获取副本后,只需要父对象的原型。从中我们可以看到,我们只需要getName()的原型。
S3:将去掉实例的属性和方法。现在是构造函数发挥作用的时候了。看看下面的代码,parent.prototype重构为一个本地对象的子对象的原型,然后点子构造函数构造函数。
函数父(){
这名'123;
这水果= { 'apple'};
}
母。原型。getName =函数(){
返回this.name;
}
函数子(){
parent.call(本);
这个年龄= 20岁;
}
函数扩展(父、子){
新对象(父原型);
proto.constructor =儿子;
儿子。原型=原型;
}
扩展(父、子);
儿子。原型。getAge =函数(){
返回this.age;
}

以上是本文的全部内容,希望大家能喜欢。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部