您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

JavaScript中两个非继承方法用法实例详解

2024/3/24 22:15:59发布17次查看
1、每个函数都包含两个非继承而来的方法:apply()和call()。 
2、他们的用途相同,都是在特定的作用域中调用函数。 
3、接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
call()方法第一个参数与apply()方法相同,但传递给函数的参数必须列举出来。 例1: 
window.firstname = "diz"; window.lastname = "song"; var myobject = { firstname: "my", lastname: "object" }; function helloname() { console.log("hello " + this.firstname + " " + this.lastname, " glad to meet you!"); } helloname.call(window); //huo .call(this); helloname.call(myobject);
运行结果为:
hello diz song glad to meet you! hello my object glad to meet you!
例2:
function sum(num1, num2) { return num1 + num2; } console.log(sum.call(window, 10, 10)); //20 console.log(sum.apply(window,[10,20])); //30
分析:在例1中,我们发现apply()和call()的真正用武之地是能够扩充函数赖以运行的作用域,如果我们想用传统的方法实现,请见下面的代码:
window.firstname = "diz"; window.lastname = "song"; var myobject = { firstname: "my", lastname: "object" }; function helloname() { console.log("hello " + this.firstname + " " + this.lastname, " glad to meet you!"); } helloname(); //hello diz song glad to meet you! myobject.helloname = helloname; myobject.helloname(); //hello my object glad to meet you!
见加红的代码,我们发现,要想让helloname()函数的作用域在对象myobject上,我们需要动态创建myobject的helloname属性,此属性作为指针指向helloname()函数,这样,当我们调用myobject.helloname()时,函数内部的this变量就指向myobjecct,也就可以调用该对象的内部其他公共属性了。
通过分析例2,我们可以看到call()和apply()函数的真正运用之处,在实际项目中,还需要根据实际灵活加以处理!
一个小问题:再看一看函数中定义函数时,this变量的情况
function temp1() { console.log(this); //object {} function temp2() { console.log(this); //window } temp2(); } var obj = {}; temp1.call(obj); //运行结果见上面的注释!!!!
执行结果与下面的相同:
function temp1() { console.log(this); temp2(); } function temp2() { console.log(this); } var obj = {}; temp1.call(obj);
以上就是javascript中两个非继承方法用法实例详解的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product