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;
}
以上是本文的全部内容,希望大家能喜欢。