现在的位置: 首页 > 综合 > 正文

javascript 中的继承

2013年06月15日 ⁄ 综合 ⁄ 共 1487字 ⁄ 字号 评论关闭
文章目录

继承主要是用到了 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

 

抱歉!评论已关闭.