javascript 中的继承

继承主要是用到了 js 中的call 或者 apply 函数

call方法JScript参考中的说明:调用一个对象的一个方法,以另一个对象替换当前对象。call([thisObj[,arg1[, arg2[, [,.argN]]]]]),但是没有示例
apply方法JScript参考中的说明:应用某一对象的一个方法,用另一个对象替换当前对象。apply([thisObj[,argArray]])
实际上这两个的作用几乎是相同的,要注意的地方是call(thisObj[,arg1[, arg2[,)中的arg参数可以是变量,而apply([thisObj[,argArray]])中的参数为数组集合。下面来看看call, apply的具体应用

//  simple call demo
function  simpleCallDemo(arg)  {
 window.alert(arg);
}

function  handleSPC(arg)  {
 simpleCallDemo.call(
this, arg);
}

//  simple apply demo
function  simpleApplyDemo(arg)  {
 window.alert(arg);
}

function  handleSPA(arg)  {
 simpleApplyDemo.apply(
this, arguments);
}

从上面简单的例子可以看出,call和apply可以把当前的参数传递给另外一个函数的参数中,从而调用另一个函数的应用。有的时候这是一个很实用的方法,当然,用call或是apply(是参数或是数组),看实际情况而定了。

 继承:

call和apply还有一个技巧在里面,就是用call和apply应用另一个函数(类)以后,当前的函数(类)就具备了另一个函数(类)的方法或者是属性,这也可以称之为“继承”。看下面示例。

function  base()  {
    
this.member = "never-online";
    
this.method = function() {
        window.alert(
this.member);
    }

}

function  extend()  {
    base.call(
this);
    window.alert(member);
    window.alert(
this.method);
}

extend();

上面的例子可以看出,通过call之后,extend可以继承到base的方法和属性。
再看一个apply的应用

 

// 方法1
function  oldf(x)  {
    
return "没改之前的方法:" + x;
}


// 方法2
function  newf(args)  {
  args[
0= "修改之后的方法: " + args[0];
  
return args;
}


// 开始将方法2跟方法1连接起来,让调用方法1的时候先调用方法2
function  handleAdApplyDemo(obj, fname, newFunc)  {
  
var oldFunc = obj[fname];
  obj[fname] 
= function() {
    
return oldFunc.apply(this, newFunc(arguments));
  }
;
}


handleAdApplyDemo(
this " oldf " , newf);

// 试一下修改之后的方法
alert(oldf( " hello " ));

这样便改写了方法1

 

你可能感兴趣的:(JavaScript,function)