Javascript非构造函数的继承
例如,有一个称为汉语的对象。
复制代码代码如下所示:
中国= { var国家:中国};
还有一个对象叫医生。
复制代码代码如下所示:
职业博士:}
我怎样才能得到医生来继承中国人
需要注意的是,所有这两个对象都是普通对象,而不是构造函数,也不能使用构造函数方法来执行继承。
二、对象()方法
JSON的格式,发明者道格拉斯克罗克福德,提出了一种对象()函数可以做的。
函数对象(o){
函数(f){ }
f.prototype = O;
返回新的f();
}
实际上,对象()函数只需要做一件事,即指向父对象的原型对象句柄的属性,以便子对象和父对象在一起。
使用时,第一步是对父对象的基础上,Oicheng Ko对象:
复制代码代码如下所示:
变量=对象(中文);
然后,添加的子对象本身的属性。
复制代码代码如下所示:
doctor.career = '医生';
此时,子对象继承了父对象的属性。
复制代码代码如下所示:
警惕(医生,国家);
三。浅拷贝
除了使用原型链
以下功能是复制:
功能extendcopy(P){
var;
对于(var i){
c {我} = { } };
}
c.uber = P;
返回C;}
当你使用它的时候,写下这个:
复制代码代码如下所示:
VaR的医生= extendcopy(中文);
doctor.career = '医生';
警惕(医生,国家);
但是,这样的副本存在一个问题,即,如果父对象的属性等于数组或另一个对象,实际上,子对象只是一个内存地址,而不是一个真正的副本,所以父对象被篡改是有可能的。
现在,将出生地属性添加到中文中,其值是数组。
复制代码代码如下所示:
chinese.birthplaces = { '北京','上海','香港' };
通过extendcopy()函数,继承中国医生。
复制代码代码如下所示:
VaR的医生= extendcopy(中文);
然后,我们给医生的出生地加上一个城市:
复制代码代码如下所示:
Doctor.birthPlaces.push('xiamen);
发生什么事了中国的出生地也发生了变化!
复制代码代码如下所示:
警报(医生。发源地); / /北京,上海,香港,厦门
警报(中国。发源地); / /北京,上海,香港,厦门
所以,extendcopy()是一份基本的数据类型,我们称之为浅拷贝。这是早期的jQuery实现继承的方式。
四,深拷贝
深拷贝是一个数组和一个真正意义上的对象的副本,只要递归地调用浅拷贝,就不难实现。
功能deepcopy(P,C){
VaR C = C | | { };
对于(var i){
如果(typeof p {我} = 'object){
C = { = }(P = {构造函数=数组){ };
deepcopy(P {我},C {我});
其他{ }
c {我} = { } };
}
}
返回C;}
当你使用它的时候写这个:
复制代码代码如下所示:
VaR的医生= deepcopy(中文);
现在,添加一个属性的父对象,它是一个数组,然后在子对象修改该属性:
复制代码代码如下所示:
chinese.birthplaces = { '北京','上海','香港' };
Doctor.birthPlaces.push('xiamen);
在这一点上,父亲的对象不会受到影响。
复制代码代码如下所示:
警报(医生。发源地); / /北京,上海,香港,厦门
警报(中国。发源地); / /北京,上海,香港
目前,jQuery库使用这种继承方法。
以上是本文的全部内容,希望大家能喜欢。