javacsript中call() 函数
call 方法
调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数1:thisObj
可选项。将被用作当前对象的对象。
参数2:arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
看懂了没?说实话我没看懂,哈哈,没看懂继续往下看。
call 方法在js继承中经常看到,也一直搞不懂,这到底是什么东西,看下面这段代码:
01.function Person(name,age){ 02. this.name = name; 03. this.age=age; 04. this.alertName = function(){ 05. alert(this.name); 06. } 07. this.alertAge = function(){ 08. alert(this.age); 09. } 10. } 11. 12. function webDever(name,age,sex){ 13. Person.call(this,name,age); 14. this.sex=sex; 15. this.alertSex = function(){ 16. alert(this.sex); 17. } 18. } 19. var test= new webDever("WEB开发",28,"男"); 20. test.alertName();//WEB开发 21. test.alertAge();//28 22. test.alertSex();//男这样 webDever类就继承Person了,Person.call(this,name,age) 的 意思就是使用 Person对象代替this对象,那么 webDever中不就有Person的所有属性和方法了吗,test对象就能够直接调用Person的方法以及属性了;
说的再明白一点,就是相当于将webDever中的Person.call(this,name,age)这部分代码替换为Person类的:
1.this.name = name; 2. this.age=age; 3. this.alertName = function(){ 4. alert(this.name); 5. } 6. this.alertAge = function(){ 7. alert(this.age); 8. }这样webDever类就相当于:
01. function webDever(name,age,sex){ 02. this.name = name; 03. this.age=age; 04. this.alertName = function(){ 05. alert(this.name); 06. } 07. this.alertAge = function(){ 08. alert(this.age); 09. } 10. 11. this.sex=sex; 12. this.alertSex = function(){ 13. alert(this.sex); 14. } 15. } 16. var test= new webDever("WEB开发",28,"男"); 17. test.alertName();//WEB开发 18. test.alertAge();//28 19. test.alertSex();//男
浙公网安备 33010602011771号