理解和熟练运用call和apply

在javascript OOP中,我们经常会这样定义:

function cat(){ } cat.prototype={      food:"fish",      say: function(){            alert("I love "+this.food);      } }
var blackCat = new cat; blackCat.say();

但是如果我们有一个对象whiteDog = {food:"bone"},我们不想对它重新定义say方法,那么我们可以通过call或apply用blackCat的say方法:blackCat.say.call(whiteDog);
所以,可以看出call和apply是为了动态改变this而出现的,当一个object没有某个方法,但是其他的有,我们可以借助call或apply用其它对象的方法来操作。
用的比较多的,通过document.getElementsByTagName选择的dom 节点是一种类似array的array。它不能应用Array下的push,pop等方法。我们可以通过: var domNodes =  Array.prototype.slice.call(document.getElementsByTagName("*")); 这样domNodes就可以应用Array下的所有方法了。

时间: 2024-07-30 10:17:06

理解和熟练运用call和apply的相关文章

理解JS中的call、apply、bind方法

理解JS中的call.apply.bind方法(*****************************************************************) 在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:apply . call .bind 三者都是用来改变函数的this对象的指向的:apply . call .bind 三者

如何理解和熟练运用js中的call及apply?

要先明白存在call和apply的原因,才能记得牢一点: 在javascript OOP中,我们经常会这样定义: function cat(){ } cat.prototype={ food:"fish", say: function(){ alert("I love "+this.food); } } var blackCat = new cat; blackCat.say(); 但是如果我们有一个对象whiteDog = {food:"bone&quo

理解和熟练运用js中的call及apply

call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向. 因为 JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念. 在javascript OOP中,我们经常会这样定义: function cat(){}cat.prototype={ food:"fish", say: function(){ alert("I love "+t

理解JavaScript的caller,callee,call,apply

文章挺好的,虽然我用的是jQuery,但感觉还是有些用的--- 首先想说说javascript中函数的隐含参数:arguments Arguments 该对象代表正在执行的函数和调用它的函数的参数. [function.]arguments[n]m.hrbfc120.com 参数function :选项.当前正在执行的 Function 对象的名字. n :选项.要传递给 Function 对象的从0开始的参数值索引. 说明 Arguments是进行函数调用时,除了指定的参数外,还另外创建的一个

理解javascript的caller,callee,call,apply概念

在提到上述的概念之前,首先想说说javascript中函数的隐含参数:arguments Arguments 该对象代表正在执行的函数和调用它的函数的参数. [function.]arguments[n]参数function :选项.当前正在执行的 Function 对象的名字. n :选项.要传递给 Function 对象的从0开始的参数值索引.说明 Arguments是进行函数调用时,除了指定的参数外,还另外创建的一个隐藏对象.Arguments是一个类似数组但不是数组的对象,说它类似 数组

简单理解Javascript中的call 和 apply

javascript中面向对像的能力是后来加进来的, 为了兼容性, 所以整出了很多奇特的东西, function Animal(){ this.name = "Animal"; this.showName = function(){ alert(this.name); } } function Cat(){ this.name = "Cat"; } var animal = new Animal(); var cat = new Cat(); //通过call或ap

(二)this、call和apply

在javascript中,this关键字总让一些初学者迷惑,Function.prototype.call, Function.prototype.apply这两个方法广泛的运用.我们有必要理解这几个概念. 一:this 跟别的语言大相径庭的是,javascript的this总是指向一个对象,而具体指向那个对象在运行时基于函数的执行环境动态绑定的,非函数被声明时的环境. (1).this的指向 除去不常用的with和eval情况,具体到实际的应用中,this的指向大致分为下面4种. 作为对象的方

理解矩阵【转】 作者:孟岩

编者按:想要机器学习,线性代数必要先行,至于为何,不如看看这篇文章,肯定会有所启发的.同时本站推荐MIT Strang的线性代数公开课:http://v.163.com/special/opencourse/daishu.html,同时推荐他的两本教材(号称北美最流行):<Introduction to Linear Algebra>, 4th Edition by Gilbert Strang, <Linear Algebra and Its Applications>, 4th

【转载】理解矩阵(一)

原文:理解矩阵(一) 前不久chensh出于不可告人的目的,要充当老师,教别人线性代数.于是我被揪住就线性代数中一些务虚性的问题与他讨论了几次.很明显,chensh觉得,要让自己在讲线性代数的时候不被那位强势的学生认为是神经病,还是比较难的事情. 可怜的chensh,谁让你趟这个地雷阵?!色令智昏啊! 线性代数课程,无论你从行列式入手还是直接从矩阵入手,从一开始就充斥着莫名其妙.比如说,在全国一般工科院系教学中应用最广泛的同济线性代数教材(现在到了第四版),一上来就介绍逆序数这个“前无古人,后无