【JavaScript】js中的call方法
2024-10-06 20:44:43
moziila官方文档链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call
fun.call(thisArg[, arg1[, arg2[, ...]]])
1.其中fun表示原始的方法对象;
2.参数:
thisArg表示最终使用的对象;
arg1和arg2为该方法的参数。
简单的说,就是使用:原始方法对象.call(最终的对象,方法参数列表),这样就使得原始方法中的用到的this对象变成了最终的对象,而不是原始方法所对应的对象。
//如下实例:
function B(){
this.name = 'kitty';
this.age = 24;
this.say = function(){
console.debug(this.name)
};
} function C(){
this.name = 'tab';
}
var c = new C();
console.debug(b.say.call(c));//就是将b对象中的say方法的调用者对象this替换为c对象,那么此时say方法中的this对象就是c对象了。
---------------------------------------
上面代码的console打印结果:
---------------------------------------
3.【注】:使用call方法可以实现继承:
可以让call()中的对象调用当前对象所拥有的function。你可以使用call()来实现继承:写一个方法,然后让另外一个新的对象来继承它(而不是在新对象中再写一次这个方法)。
function Old(age){
this.age = age;
this.type = age>18?'adult':'children';
}; function Sub(){
this.name = 'son';
this.subM = function(age){
Old.call(this,age);
}
}
var s = new Sub();
console.debug('未调用父类构造方法前的type属性是:'+s.type)
console.debug('未调用父类构造方法前的子类对象是:')
console.debug(s)
console.debug('------------------------------------------------');
s.subM(111)
console.debug('已调用父类构造方法前的type属性是:'+s.type)
console.debug('已调用父类构造方法后的子类对象是:')
console.debug(s) //通过在子类的构造函数中调用父类的构造函数,实现了将原先定义在父类构造函数中的属相创建及赋值操作在此时由于使用了call方法将this指向了子类对象,因此此时该父类构造方法将属性添到了子类对象上。
--------------------------------------------------------------
上面代码的console打印结果:
--------------------------------------------------------------
最新文章
- 树形DP
- APP开发:一个APP开发需要哪些技术人员?
- USACO 3.2 ratios 高斯消元
- esriFeatureType与esriGeometryType的区别与联系
- KMP算法的C++实现
- 使用AngularJS构建大型Web应用
- Chapter 21_5.2 tab扩展
- iOS SDWEBImage和collectionView的组合,以及collectionView的随意间距设置
- 花了一年时间开发的弯管机YBC编程软件
- 微信跳转外部浏览器打开指定H5链接的功能源码
- (一):C++分布式实时应用框架----整体介绍
- puppet 横向扩展(三)
- ES系列八、正排索Doc Values和Field Data
- js 获取数组重复的元素
- C# 多线程九之Timer类
- HDU 4888 Redraw Beautiful Drawings 网络流 建图
- Excel poi API基础教程!
- eclipse maven 配置
- js作用域对象与运用技巧
- PAT 天梯赛 L1-001 【水】