js09--函数 call apply
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type=text/javascript charset=utf-8>
var k = 10 ;
function test(){
this.k = 20;
}
alert(window.k);//10
alert(k);//10
test();//window.test()
alert(test.k);// undefined
alert(window.k);//20
alert(k);//20 var t = new test();
alert(t.k);//20
// this:this对象是指在运行时期基于执行环境所绑定的
// this总是指向调用者,也就是说 谁调用了我 我就指向谁
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type=text/javascript charset=utf-8>
function sum(x , y){
return x+y;
}
function call1(num1 , num2){
return sum(num1 , num2);//函数可以嵌套调用
}
console.log(call1(1,2));
/* 每一个函数都包含两个非继承而来的方法:call、apply。把方法动态加在对象上,给对象加一个已有的新方法,代码的复用。语句执行完对象就没有这个方法了。
使用call()、aplly()来扩充作用域的最大好处就是对象不需要与方法有任何耦合关系。 */
//call apply 把方法动态加在对象上,给对象加一个已有的新方法,代码的复用。简单的用法:绑定一些函数 用于传递参数 调用
function sum(x , y){
return x+y;
}
function call1(num1 , num2){
return sum.call(this , num1 , num2);//调用的方法-call-(对象,参数)
}
function apply1(num1 , num2){
return sum.apply(this , [num1,num2]);
}
alert(call1(10 , 20));
alert(apply1(20,40)); window.color = 'red';
var obj = {color:'blue'};
var obj2 = {color:'yellow'};
function showColor(){
alert(this.color);
}
showColor.call(window);
showColor.call(obj);//把方法加在对象上,给对象加一个已有的新方法。 // call方法的简单模拟与实现
//function 方法
function test1(a , b){
return a+b;
}
// 函数名字大写,表示是类,(规范)
function Obj(x, y){
this.x = x ;
this.y = y ;
return x*y;
}
var o = new Obj(10 , 20);//return对o没影响
o.method = test1 ;
alert(o.method(o.x , o.y));
delete o.method;//o不是{}格式,也可以删除方法属性,语句执行完对象就没有这个方法了 alert(test1.call(o,o.x ,o.y));//语句执行完对象就没有这个方法了 ===============================================================
function Obj(x, y){
this.x = x ;
this.y = y ;
this.say = function(){alert(123);}
return x*y;
}
function test1(a , b){
return a+b;
}
var o = new Obj(10 , 20);//return对o没影响 alert(o.x);
delete o.x;
alert(o.x);//undefined o.say();//123
delete o.say;
o.say();//o.say is not a function o.method = test1 ;
alert(o.method(o.x , o.y));//30
delete o.method;//语句执行完对象就没有这个方法了
alert(o.method(o.x , o.y));//o.method is not a function
</script>
</head>
<body>
</body>
</html>
js09--函数 call apply的更多相关文章
- Javascript中call函数和apply函数的使用
Javascript 中call函数和apply的使用: Javascript中的call函数和apply函数是对执行上下文进行切换,是将一个函数从当前执行的上下文切换到另一个对象中执行,例如: so ...
- 函数的apply、call方法和length属性
函数的apply.call方法和length属性JavaScript为函数对象定义了两个方法:apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别:Fu ...
- javascript中call函数与apply
javascript中的call方法使当前对象可以调用另一个对象的方法,即改变this的指向内容 var first_object = { num: 42 }; var second_object = ...
- pandas的map函数与apply函数的区别
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(4,3),columns=list("ABC ...
- [Effective JavaScript 笔记]第21条:使用apply方法通过不同数量的参数调用函数
apply()方法定义 函数的apply()方法和call方法作用相同,区别在于接收的参数的方式不同.apply()方法接收两个参数,一个是对象,一个是参数数组. apply()作用 1.用于延长函数 ...
- call,apply,bind函数
一.call函数 a.call(b); 简单的理解:把a对象的方法应用到b对象上(a里如果有this,会指向b) call()的用法:用在函数上面 var Dog=function(){ this.n ...
- javascript中函数的call,apply及bind方法
call 方法调用一个对象的一个方法,以另一个对象替换当前对象.call([thisObj[,arg1[, arg2[, [,.argN]]]]])参数thisObj可选项.将被用作当前对象的对象. ...
- 函数对象的call()、apply() 方法区别
函数对象的call().apply() 方法 函数作为对象提供了call(),apply() 方法,他们也可以用来调用函数,这两个方法都接受一个对象作为参数,用来指定本次调用时函数中this的指向: ...
- this、apply/call、bind、闭包、函数、变量复制
一.实际场景中抽象出的一个问题 下面this各指向什么? var a = { b: function() { console.log(this); }, f: function() { var c = ...
- R语言中apply函数
前言 刚开始接触R语言时,会听到各种的R语言使用技巧,其中最重要的一条就是不要用循环,效率特别低,要用向量计算代替循环计算. 那么,这是为什么呢?原因在于R的循环操作for和while,都是基于R语言 ...
随机推荐
- Vue2.0组件实现动态搜索引擎(一)
原文链接:https://blog.csdn.net/qwezxc24680/article/details/74550556 从github上看到一个不错的开源项目:https://github.c ...
- Mac上配置 Ruby on Rails和Git
Ruby on Rails on Mac =============================================================================== ...
- 同一个事务里 查询 已删除可是未提交的数据[bug记录]
前几天犯了个低级错误.在一个事务方法里老是查询不到某条记录,可是debug卡住时,用db工具查.又能查出值. 经过一番折腾,原来是我在同一个事务里 查询 了已删除可是未提交的数据.当然查询不到了! . ...
- 通过C语言程序改动控制台的背景和前景颜色
本文主要解说怎样通过C语言来改动dos背景和前景颜色.我们首先来看一下dos的背景颜色的属性. 打开開始菜单,点击执行,弹出执行对话框.输入cmd,回车. (打开dos控制台) 在命令提示符界面下,输 ...
- 制作自己的特色PE----Mr.Zhang
必备的文件和工具 win7.iso/win8.iso Windows系统ISO镜像 WimTool BOOT.WIM文件的改动 RegWorkShop 注冊表编辑和分析利器 UltraISO 改动wi ...
- Servlet深入学习,规范,理解和实现(中)——深入理解Tomcat(一)
心得:在写这篇博客之前.我大致阅读一些关于Tomcat的书籍和博客等资料.有些资料由于时间的关系,解说的Tomcat版本号太老.有些资料能够非常好的说明Tomcat整理结构和设计思想可是非常多重要的问 ...
- codeforces Gym100589H Count Subarrays 树状数组/线段树+离散化
题意:给你一个数组,问你有多少子数组中的逆元数不小于K个,N<105 还在研究中
- java实习生的成长之路<转>
首先初识语法的阶段,必须要学会怎么操作对象,操作if和for,操作list set map,然后是线程.IO和jdbc什么的,其余的,若是一时不理解,可以后边需要时再学. 这阶段完了,你可以写些能在控 ...
- 远程带参数POST访问接口,返回数据
1. string token = GetRequest.GetString("token"); int customer_id = GetRequest.GetInt(" ...
- @MapperScan 和 @ComponentScan 区别
1.首先@MapperScan和@ComponentScan都是扫描包 2.@ComponentScan是组件扫描注解,用来扫描@Controller @Service @Repository这类 ...