首先,js中对象的继承

js中有三种继承方式

1.js原型(原型)实现继承
复制代码代码如下所示:



功能人(姓名,年龄){
这个名字=名字;
这个年龄=年龄;
}
的人。原型。sayHello =函数(){
警报()使用原型获取名称: + +此名称);
}
无功/ =新的人(马小倩
(每打招呼); / /输出:名字使用原型:马晓倩


函数(学生){ }
学生。原型=新的人(洪通
新学生();
学生。原型。等级= 5;
学生。原型。介绍=函数(){
警戒(这个等级);
}
(斯图sayHello); / /输出:名字使用原型:洪汝通
(斯图介绍); / /输出:5




2。构造函数执行继承
复制代码代码如下所示:



函数父(名称){
这个名字=名字;
这个sayparent =函数(){
警报(父:+ +此名称);
}
}

函数子(名称,年龄){
这tempmethod =父母;
This.tempMethod(人名);
这个年龄=年龄;
这个saychild =函数(){
警报(子:+)+这个名称;
}
}

VaR母=新的母公司(江市);
(父母。sayparent); / /输出:父:蒋建臣
var子=新的子(李明,24);输出:子:李明年龄:24
child.saychild();




3.call,将实现继承
复制代码代码如下所示:



功能人(姓名,年龄,爱情){
这个名字=名字;
这个年龄=年龄;
这就是爱;
这个函数=说(){
警报()name+;
}
}

调用模式
函数学生(姓名,年龄){
person.call(这名字,年龄);
}

应用模式
函数教师(姓名,爱情){
person.apply(,{姓名、爱});
/ / person.apply(这个参数); / /保持相同的词,争论
}

/ /电话和应用的异同:
1,第一个参数是相同的,引用当前对象
2,第二个参数不同:调用是参数列表;应用程序是数组(参数也可以)。

无功/ =新的人(武凤楼
Per.say();
var =新学生(曹禺,18);输出:曹禺
Stu.say();
var茶=新教师(Qin Jie,16);输出:Qin Jie
Tea.say();





使用二,调用和应用(详细介绍)

在js中,调用和应用可以继承。唯一的参数是不同的。func.call(var1,var2,func1,var3)对应于应用写作方法:func.apply(func1,功能。适用)。

js手册中的调用解析:
复制代码代码如下所示:
呼叫的方法
调用对象的一种方法用于用另一个对象替换当前对象。

电话(thisobj { { { {,arg1,arg2,{,argn }}}}}。)

参数
thisobj
可选。它将用作当前对象的对象。

arg1,arg2,argn
可选。方法参数序列将被传递。

解释
调用方法可以用来代替另一个对象调用方法时,调用的方法可以改变一个函数对象上下文从初始上下文的thisobj指定新的对象。

如果没有提供thisobj参数,则全局对象作为thisobj。

简单地说,这两个函数的功能是改变对象的内部指针,即改变对象的内容,这在JS面向对象编程的过程中有时是有用的,我们以应用为例来说明这两个函数在js中的重要作用:
复制代码代码如下所示:
函数名(名称,年龄){定义类
此名称= name; / name
这个年龄=年龄
这个跟=函数(){ alert(这个名字)};
}
函数(打印)
本。funcname =打印;
这个=函数(){
var;
对于(在此中的var键){
如果(typeof(此{key})!=函数{){
Msg.push({关键,:
}
}
警报(msg.join());
};
}
函数学生(姓名,年龄,年级,学校){学生班
person.apply(这个参数); / /上级打电话的地方
Print.apply(这个参数);
这个等级=等级;
这个学校=学校/学校。
}
var =新的人(预言
p1.sayhello();
变量=新学生(白云)
s1.show();
s1.sayhello();
警报(S1。funcname);

In addition, Function.apply () has a prominent role in the performance of the lifting program:
让我们与math.max开始()函数,然后math.max可以采取任何参数并返回所有参数的最大。
如
复制代码代码如下所示:
警报(math.max(5,8)); / / 8
警报(math.max(5,7,9,3,1,6)); / / 9

但是,在许多情况下,我们需要找到数组中元素的最大值。

var arr = { 5,7,9,1 };
/ /警报(math.max(ARR)); / /这不是enough.nan

我们应该写这封信吗
功能getmax(ARR){
无功arrlen = arr.length;
对于(var i = 0,ret = ARR { 0 };i < arrlen;i++){
ret = math.max(RET,ARR {我});
}
返回页首;
}

警报(getmax(ARR)); / / 9

对于应用程序,可以像这样写。
功能getmax2(ARR){
返回math.max.apply(null,ARR);
}

警报(getmax2(ARR)); / / 9

两 / /代码来完成相同的目标,但getmax2更高效、简单和优雅。

另一个推送方法数组的例子。
VaR arr1 = {天};
VaR arr2 = {三};
/ /如果我们想把arr2膨胀,然后加入前逐一让arr1 = { 1,3,4,3,4,5 }
/ / arr1.push(arr2)显然是不行的。因为它会变得{ } } {三天,

我们只能用 / /一个周期的推动(当然,也可以使用arr1.concat(arr2),但Concat方法不会改变arr1本身)

无功arrlen = arr2.length;
对于(var i = 0;i < arrlen;i++){
arr1.push(arr2 {我});
}

由于应用程序,事情变得如此简单

Array.prototype.push.apply(arr1,arr2); / / arr1现在是你想要的结果