Javascript非构造函数的继承

Javascript非构造函数的继承
1。非构造函数的继承是什么

例如,有一个称为汉语的对象。

复制代码代码如下所示:

中国= { 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库使用这种继承方法。

以上是本文的全部内容,希望大家能喜欢。

tag:继承构造函数电脑软件Javascript

相关内容