由JavaScript中call()方法引发的对面向对象继承机制call的思考

 

call

  摘要:

     通过给定的thisarguments来调用一个function

     注意:该方法与apply方法语法相似,但不同的是:call()接受参数列,而apply()接受传递给函数的参数数组

     Function类的一个方法:版本JavaScript 1.3版以后

  语法:

     fun.call(thisArg[, arg1[, arg2[, ...]]])

  参数说明:

     thisArg:

        为fun()的调用指定对象。注意:你看到的this值可能不是实际的值:如果这个方法是在 non-strict mode下,null和undefined会被全局对象替换掉,原始的值会被封装。

     arg1,arg2,....

        this对象的参数

  描述:

    当调用一个已存在的函数,你可以分配不同的对象。这时,this指定的对象是当前正在调用对象。

    通过call,你可以只写一次方法,而被另一个对象来继承。而不用自己再新建对象时,重写该方法。(即对象冒充,下面会有例子说明!)

在MDN官网上面有例子可以看看。另外,无意中在stackoverflow上看到了篇相关的问题,看到里面的一个回答,一下子就明白了对象冒充,怎么冒充了。

下面把那部分摘取出来 In javascript, methods of an object can be bound to another object at runtime. In short, javascript allows an object to "borrow" the method of another object:

 1 object1 = {
 2     name:'frank',
 3     greet:function(){
 4         alert('hello '+this.name)
 5     }
 6 };
 7 
 8 object2 = {
 9     name:'andy'
10 };
11 
12 // Note that object2 has no greet method.
13 // But we may "borrow" from object1:
14 
15 object1.greet.call(object2);
 

Thcall and apply methods of function objects (in javascript functions are objects as well) allows you to do this. So in your code you could say that the Nodelist is borrowing an array's slice method. What does the conversion is the fact that slice returns another array as it's result.    

这里的第一句话说的很形象,大致意思就是:在JavaScript中,对象的方法可绑定到另外一个对象上。简单点说,就是,JavaScript中允许对象‘借用’本不属于它本身的方法。“冒充”也就不言而喻了,就上上面的例子来说,object2冒充object1,来调用object1的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值