浅谈javascript中的call()和apply()方法

话说在js中,每个函数都包含两个非继承而来的放方法,apply()和call(),使得我们能在特定的作用域中调用函数。

咱先来谈谈其共同点:

先以call为例:

window.color = "red";
    var o = {color: "blue"};

    function sayColor(){
        alert(this.color);
        console.log(this);
    }

    sayColor();  //red

    sayColor.call(this);   //red
    sayColor.call(window);   //red
    sayColor.call(o);   //blue

在上面的代码中,分别调用了四次sayCokor()函数,第一次,直接调用,与第二个以当前this为对象调用(sayColor(this)),以及直接以window作为对象调用,都是指的当前window对象(可以理解为全局对象),返回window的color属性,而在第四次调用时,将对象o传了过去,此时sayColor方法所调用的color属性就是对象o的color属性了。

而对于apply():

其实现和call几乎一样,而两者区别在于,当函数需要传入参数时,apply()可以使用参数数组,而call()只能将参数一个一个的传过去。

例:

apply(this , [num1 , num2]);

call(this , num1 , num2);

具体使用环境也是依情况而定的。

说说他们的有点:  不需要对象和方法有任何耦合关系,一般来说,除了window对象以外,我们是很难去直接用对象去掉用和这个对象没有半毛线关系或同处于一个作用域内的方法的。

顺便添加一下最近用到的这两个函数的语句:

  如何获取数组中的最大最小值:

    

var max2 = Math.max.apply(Math,values);

  吧Math对象作为apply()的第一个参数,从而正确的设置this值。

知识点补充:window对象,WEB浏览器一般讲全局变量作为window对象的一部分属性加以实现。因此,在全局作用域下声明的所有变量和函数,就都称为了window对象的属性。

时间: 2024-12-31 03:41:40

浅谈javascript中的call()和apply()方法的相关文章

浅谈javascript中的call与apply方法

call方法与apply方法都是为了改变函数体内部this的指向. call方法与apply方法,这二者的作用完全一样,只是接受参数的方式不太一样. apply()方法: Function.apply(obj,args) obj将代替Function里的this对象. args表示一个数组或者类数组.apply方法把这个集合中的元素作为参数传递给被调用的函数 call()方法中的第一个参数与apply方法一样,只不过第二个参数则是一个参数列表. 这里有一点要强调的是,在非严格模式下,当我们第一个

浅谈javascript中的call、apply、bind

apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念. 先来一个栗子: function fruits() {} fruits.prototype = { color: "red", say: function() { console

浅谈JavaScript中的call和apply

语法 fun.apply(thisArg, [argsArray]) fun.call(thisArg, arg1, arg2, ...) apply 接收两个参数,第一个参数指定了函数体内this对象的指向,第二个参数为带下标的集合,这个集合可以为数组,也可以为类数组,apply 方法把这个集合总的元素传递给被调用的函数. call是包装在apply上的语法糖,如果知道具体多少个参数,可以使用call来传递参数,方便表达形参和实参的对应关系. 往往apply和call容易记混淆,不妨使用联想记

浅谈JavaScript中的原型模式

在JavaScript中创建对象由很多种方式,如工厂模式.构造函数模式.原型模式等: <pre name="code" class="html">//工厂模式 function createPerson(name,age,job) { var o = new Object; o.name = name; o.age = age; o.job = job; o.sayName = function() { alert(this.name); } retur

Javascript中call方法和apply方法用法和区别

第一次在博客园上面写博客,知识因为看书的时候发现了一些有意思的知识,顺便查了一下资料,就发到博客上来了,希望对大家有点帮助. 连续几天阅读<javascript高级程序设计>这本书了,逐渐发现了以前很多自己完全没有用过甚至见过的神奇知识点.今天在阅读到有关函数的属性和方法的时候,略感高级,于是乎,查阅了不少他人的博客,在此总结一下这两个方法的以下几个方面: 1.call()和apply()的作用和用法 2.什么时候用apply(),什么时候用call() 书上提到,每个函数都包含两个非继承而来

javascript中的call()和apply()方法的使用

1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象. 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj. apply方法: 语法:apply([thisObj[,argArray]])

移花接木—— 再谈javascript中的 call 与 apply

在JavaScript中,call 和 apply 是Function对象自带的两个方法,这两个方法的主要作用是改变函数中的this指向,从而可以达到`接花移木`的效果.本文将对这两个方法进行详细的讲解,并列出几个关于call和apply的经典应用场景. call(thisArgs [,args...]) 该方法可以传递一个thisArgs参数和一个参数列表,thisArgs指定了函数在运行期的调用者,也就是函数中的this对象,而参数列表会被传入调用函数中.thisArgs的取值有以下4种情况

浅谈JS中的call、apply、bind方法

[前言] 在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. [区别] [主体] (1)call 语法: call([thisObj[,arg1[, arg2[, [,.argN]]]]]),传递的是参数列表 定义: 调用一个对象的一个方法,以另一个对象替换当前对象. 作用: call 方法可以用来代替另一个对象调用一个方法. call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj

浅谈JavaScript中继承的实现

  谈到js中的面向对象编程,都有一个共同点,选择原型属性还是构造函数,两者各有利弊,而就片面的从js的对象创建以及继承的实现两个方面来说,官方所推荐的是两个相结合,各尽其责,各取其长,在前面的例子中,我已就在JavaScript中对象创建的方法做了一些总结,下面就其继承来道说一二:   1:原型链继承: 每一个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象内部的指针(默认的原型,所有默认类型都继承了Object,而这个继承也是用过原型链实现) fu