javacsript中call() 函数的认识
时间:2009年07月20日作者:愚人码头查看次数:8,481 views评论次数:4
call 方法
调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数1:thisObj
可选项。将被用作当前对象的对象。
参数2:arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
看懂了没?说实话我没看懂,哈哈,没看懂继续往下看。
call 方法在js继承中经常看到,也一直搞不懂,这到底是什么东西,看下面这段代码:
function Person(name,age){
this.name = name;
this.age=age;
this.alertName = function(){
alert(this.name);
}
this.alertAge = function(){
alert(this.age);
}
}
function webDever(name,age,sex){
Person.call(this,name,age);
this.sex=sex;
this.alertSex = function(){
alert(this.sex);
}
}
var test= new webDever("愚人码头",28,"男");
test.alertName();//愚人码头
test.alertAge();//28
test.alertSex();//男
这样 webDever类就继承Person了,Person.call(this,name,age) 的 意思就是使用 Person对象代替this对象,那么 webDever中不就有Person的所有属性和方法了吗,test对象就能够直接调用Person的方法以及属性了;
说的再明白一点,就是相当于将webDever中的Person.call(this,name,age)这部分代码替换为Person类的:
this.name = name;
this.age=age;
this.alertName = function(){
alert(this.name);
}
this.alertAge = function(){
alert(this.age);
}
这样webDever类就相当于:
function webDever(name,age,sex){
this.name = name;
this.age=age;
this.alertName = function(){
alert(this.name);
}
this.alertAge = function(){
alert(this.age);
}
this.sex=sex;
this.alertSex = function(){
alert(this.sex);
}
}
var test= new webDever("愚人码头",28,"男");
test.alertName();//愚人码头
test.alertAge();//28
test.alertSex();//男
不知道能不能这么理解?望大家斧正。
留一个问题:假设webDever类只要继承Person类中的alertName方法,这样可以吗?代码应该怎么写?
更多关注:理清apply, call的区别与联系
声明: 本文采用 BY-NC-SA 协议进行授权 | WEB前端开发
转载请注明转自《javacsript中call() 函数的认识》



最新评论
代码没缩进啊,看得挺累
Post:2012-02-02 18:36:19直接用 style.innerHTML = cssText ^_^
Post:2012-02-02 10:05:33@愚人码头,蛮喜欢看你写的文章的!会经常来
Post:2012-01-31 17:27:46习惯用jquery库和kissy库了,都很 »
Post:2012-01-31 16:51:11想跟您换个连接,可以吗?等待回复 »
Post:2012-01-31 12:17:24局部样式变化 通过class名改变是不 »
Post:2012-01-31 09:54:42学习了. 从来没用过 "_" 还不知 »
Post:2012-01-30 14:32:21正在学习合成的童鞋路过学习
Post:2012-01-30 13:47:37