js积累三
来源:互联网 发布:目前java主流开发框架 编辑:程序博客网 时间:2024/04/30 11:52
五、函数里的属性与方法
函数中几个重要的属性:arguments,this,caller,prototype.
1,关于this属性,其与Java,C#中的this类似---谁调用该方法,那方法里的this对象便指向谁。
2,caller属性
ECMAScript5规范了另一个函数对象的属性:caller。除了Opera的早期版本不支持,其他浏览器都支持。
这个属性保存着调用当前函数的函数的引用,如果在全局作用域中调用当前函数,caller的值为null.
functon outer(){
inner();
}
function inner(){
alert(inner.caller);//或者这样写:alert(arguments.callee.caller);
}
outer();
调用outer方法后,会弹出outer方法的源码
3,prototype属性
对于引用类型而言,prototype是保存它们所有实例方法的真正所在,换句话说,诸如toString()与valueof()等方法实际上都
保存在prototype名下,只不过是通过各自对象的实例访问而已,关于prototype以后再说明下。
4,call与apply方法
这两个方法的用途都是在特定的作用域中调用函数,相当于设置函数体内的this对象的值.apply方法接收两个参数:一个是在
其中运行的作用域,另一个是参数数组(可以是Array实例,也可以是arguments对象),比如:
function sum (num1,num2){
return num1 + num2;
}
function callSum1(num1,num2){
return sum.apply(this,arguments);//这里的this相当于window对象,下同。
}
function callSum2(num1,num2){
return sum.apply(this,[num1,num2])
}
alert(callSum1(10,10));
alert(callSum2(10,10));
而call与apply的唯一区别是:call必须明确传入每一个参数。
call与apply强大的地方是能够扩充函数赖以运行的作用域:
window.color = "red";
var o = {color : blue};
function sayColor(){
alert(this.color);
}
sayColor.call(window);//red
sayColor.call(this); //red
sayColor.call(o); //blue
使用call或apply扩充作用域的最大好处,就是对象不再需要与方法有任何耦合关系:
window.color = "red";
var o = {color : blue};
function sayColor(){
alert(this.color);
}
sayColor();//red
o.sayColor = sayColor;
o.sayColor();//blue
在最后的两行代码中,我们是先将sayColor函数放到了对象o中,然后再通过o来调用的,这样就不方便了。
0 0
- js积累三
- JS积累
- JS积累
- JS积累
- js积累
- js积累
- js:积累
- js 积累
- 积累(三)
- SQL语句积累(三)
- 平时积累(三)
- 积累问题三
- 知识点积累(三)
- 积累(三)
- OC积累(三)
- 【Mysql】积累三
- js知识积累
- JS细节性代码积累
- 第23周工作计划表
- C++ Primer Plus的若干收获--(十三)
- js积累二
- fvcom学习遇到困难
- 多线程的应用!
- js积累三
- Codeforces Round #251 (Div. 2) D 二分
- CentOS6 图形界面(gnome)安装
- FTPClient
- poj 2251 Dungeon Master()
- 中国并不是世界毒窝 请看微软提供图表
- Java Socket通信实现文件传输/图片传输
- 第二十三周工作日志
- volatile 用处