冒充方法call和apply 简述

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

<title>call</title>

<script type="text/javascript">

// 入门

function sub(x,y){

return x-y;

}

function plus(x,y){

return x+y;

}

alert(plus(2,1)); //正常执行相加

alert(sub.apply(plus,[2,1])); //使用apply方法,让plus冒充sub,执行相减(这里的[]一定要加)

// 进阶

function sub(x,y){

return x-y;

}

function plus(x,y){

return sub.apply(this,[x, y]); //直接将冒充方法写在函数体内,减少冗余

}

alert(plus(2,1)); //执行相减

//再次进阶

function sub(x,y){

return x-y;

}

function plus(x,y){

return sub.apply(this,arguments); //用内置的arguments变量自动查找所有参数

}

function plusForCall(x,y){

return sub.call(this,x,y); //使用call方法,让plusForCall冒充sub,执行相减(这里的[]一定不能加),

//这就是call和apply的区别

}

function plusForCallByArgument(x,y){

return sub.call(this,arguments); //***这个方法是错误的call方法内不能使用arguments变量

}

//综上所述,当我们使用冒充方法的时候,有参数的时候使用apply,无参数的时候使用call

//用冒充方法扩大作用域

var color="blue";

var goods={

color:"red"

};

function getColor(){

alert(this.color);

}

getColor(); //直接使用是blue,因为this在全局环境中,就代表window

getColor.call(goods); //冒充goods,这时的this代表goods

</script>

</head>

<body>

</body>

</html>

时间: 2024-07-30 21:02:37

冒充方法call和apply 简述的相关文章

函数的属性length、prototype和方法call()、apply()

length指的是该函数所期望传递进来的参数个数. function fun0(){}             //0 function fun1(num1){}         //1 function fun2(num1,num2){}    //2 //prototype function MyObject(name, size)  { this.name = name; this.size = size; } var obj = new MyObject(); MyObject.prot

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

先上代码: apply()方法示例 /*定义一个人类*/ function Person(name,age) { this.name=name; this.age=age; } /*定义一个学生类*/ function Student(name,age,grade) { Person.apply(this,arguments); //arguments即["zhangsan", 21, "一年级"] this.grade=grade; } //创建一个学生类的实例

JavaScript方法——call和apply

1.相同点: a) 产生的效果或作用完全相同: b) 至少有一个参数: c) 第一个参数必须有且是一个对象(Object),因为就是这个家伙偷懒. 2.不同点: 传递参数的方式. 前提: 1.有两个对象: A和B: 2.B有一个方法(这里用Function代替): 3.B的方法(Function)有两种参数传递的方式,但该方法产生的结果一样. 一种是除第一个参数外,其余的参数都打包进一个数组内,即B.Function.apply(A,args): 另一种是所有的参数都以各自的形式单独存在(包括第

js方法call和apply实例解析

在js编程中实现继承时 用到了两个很特殊的方法,call和apply. 在ECMAScript v3中,给Function原型定义了这两个方法,这两个方法的作用都是一样的:使用这两个方法可以像调用其他对象方法一样调用函数,这句话是从书上抄的,至少我是没读明白这是什么意思.下面说简单易懂的,先看段代码: function Introduce(name,age) { document.write("My name is "+name+".I am "+age); } v

函数深入理解---函数的属性length和方法call 和apply

函数同样有两个非常好用的属性:length 和prototype function fn1(){ } function fn2(num1,num2){ } function fn3(num1){ } //函数的length就表示该函数所期望的参数值 alert(fn1.length) // 0 alert(fn2.length) // 2 alert(fn3.length) // 1 call 和apply方法查可以通过函数名称来调用函数 对于apply而言 有两个参数,第一个是调用的上下文,第

函数方法that与apply

方法 在一个对象中绑定函数,称为这个对象的方法 var xiaoming = { name: 'xiaoming', brith: 1997, age: function(){ var y = new Date().getFullYear(); return y - this.brith; } } xiaoming.age() // 21 当我们想使用第三方变量替换冗长的xiaoming.age()的时候,我们来看看效果 // 写法1 fn = xiaoming.age; fn() // NaN

js中对象继承的冒充方法

function Parent(name){ this.name = name; this.sayName = function(){ console.log(this.name); } } function Son(name,password){ this.method = Parent; this.method(name); this.show = function(){ console.log(this.name+' : '+this.password) } delete this.met

javascript---事件绑定机制

事件绑定分两种: 1.传统事件绑定(内联模型,脚本模型)  2.现代事件绑定(DOM2级模型)    //更强大更方便 由于传统事件绑定window.onload有覆盖问题,即只能注册一次事件,所以下面只讲现代事件绑定. 1.W3C事件处理函数 addEventListener()   //添加事件 removeEventListener()  //删除事件 参数:对象.addEventListener(事件名,函数,冒泡(false)或捕获(true)的布尔值) 解决了几个问题: //1.覆盖

call() 方法 和 apply()方法详解

ECMAScript 继承机制实现 继承机制的实现 要用 ECMAScript 实现继承机制,您可以从要继承的基类入手.所有开发者定义的类都可作为基类.出于安全原因,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击. 选定基类后,就可以创建它的子类了.是否使用基类完全由你决定.有时,你可能想创建一个不能直接使用的基类,它只是用于给子类提供通用的函数.在这种情况下,基类被看作抽象类. 尽管 ECMAScript 并没有像其他语言那样严格地定义抽