当前位置: 首页 > wzjs >正文

wordpress 博客主机北海seo快速排名

wordpress 博客主机,北海seo快速排名,小程序开发难度大吗,平面设计作品欣赏官网在 JavaScript 中,.call() 和 .apply() 都是 Function 原型上的方法,用于改变函数执行时的上下文对象(即 this 指向),它们的区别仅在于参数传递的形式不同。下面结合几个常见场景,说明它们的实际应用。 1. …

在 JavaScript 中,.call().apply() 都是 Function 原型上的方法,用于改变函数执行时的上下文对象(即 this 指向),它们的区别仅在于参数传递的形式不同。下面结合几个常见场景,说明它们的实际应用。


1. 基本语法

func.call(thisArg, arg1, arg2,);
func.apply(thisArg, [arg1, arg2,]);
  • thisArg:调用时函数内部 this 应该指向的对象。
  • 参数列表call 是逗号分隔的参数序列;apply 是一个数组(或类数组)一次性传入。

2. “借用”其它对象的方法

有时候 A 对象没有某个方法,但 B 对象有,想让 A 使用 B 的方法,就可以借用:

const objA = { x: 10 };
const objB = {x: 5,getX() {return this.x;}
};console.log(objB.getX());          // 5
console.log(objB.getX.call(objA)); // 10

这里用 call(objA)getX 中的 this 强制指向 objA,就实现了“方法借用”。


3. 传递可变参数(数组转展开)

如果要把一个数组作为参数列表传给函数,用 apply 更方便:

function sum(a, b, c) {return a + b + c;
}const nums = [1, 2, 3];
console.log(sum.apply(null, nums)); // 6

等价于:

console.log(sum.call(null, nums[0], nums[1], nums[2])); // 6

在 ES6 之前,这个技巧常用于 Math.max/Math.min 获取数组最大最小值:

const arr = [5, 1, 8, 3];
const max = Math.max.apply(null, arr); // 8
const min = Math.min.apply(null, arr); // 1

ES6+ 可直接写 Math.max(...arr),但在老环境或动态参数场景下,.apply 仍然有效。


4. 构造可重用的“类”或混入(Mixin)

当多个对象需要共享同一组方法时,可以用 call/apply 在初始化时添加属性:

function Person(name) {this.name = name;
}
Person.prototype.say = function () {console.log(`Hi, I'm ${this.name}`);
};function Employee(name, company) {Person.call(this, name);  // “继承” Person 构造函数this.company = company;
}
Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;Employee.prototype.getCompany = function () {console.log(this.company);
};const emp = new Employee('Alice', 'Acme Inc.');
emp.say();        // Hi, I'm Alice
emp.getCompany(); // Acme Inc.

这里 Person.call(this, name)Employee 构造函数复用了 Person 的初始化逻辑。


5. 在事件处理或异步场景中绑定上下文

在回调函数中,this 往往丢失。可用 callapply 手动指定:

const obj = {value: 42,getValueAfterDelay(delay) {setTimeout(function () {// 普通函数中 this 指向全局或 undefinedconsole.log(this.value);  }.call(this), delay);}
};obj.getValueAfterDelay(1000);
// 42

不过更常用的是 .bind(this),它会返回一个新的函数:

setTimeout(function () {console.log(this.value);
}.bind(obj), 1000);

6. 小结

  • 何时用 .call()
    需要显式地将若干个独立参数逐一传入,并指定 this

  • 何时用 .apply()
    参数已经以数组或类数组形式准备好,想“一次性”传递给函数。

  • .bind() 的关系

    • call/apply 立即执行函数并指定 this
    • bind 返回一个新函数,后续调用时 this 永久绑定。

掌握了这三种方法,就可以灵活地控制函数执行的上下文,以及参数的传递方式,特别是在函数复用、混入、事件回调、动态参数等场景中非常有用。

http://www.dtcms.com/wzjs/215512.html

相关文章:

  • wordpress作者信息栏深圳专业seo
  • 佛山响应式网站开发青岛网站建设制作
  • 手机版商城网站案例营销策划方案包括哪些内容
  • wordpress切换php版本seo推广优化培训
  • 百度 模块网站抖音推广引流平台
  • 学校网站要求网站统计
  • 专业网站建设费用35个成功的市场营销策划案例
  • 福州自助建站深圳网络营销外包公司推荐
  • 网站建设专员工作职责什么是网络营销含义
  • 上海品质网站建设深圳seo优化服务
  • 嘉兴网站建设优化深圳app推广平台
  • 洛阳网站建设公司小说推广平台有哪些
  • 做网站ps切图品牌的宣传及推广
  • 网站被插入广告 代码企业网站营销的优缺点及案例
  • 微商刚起步怎么找客源奶糖 seo 博客
  • 婚纱网站建设 最开始广告公司推广软文
  • 网络营销推广方法论文 结合案例天津seo招聘
  • 做个自己的网站需要多少钱站长是什么级别
  • 有免费网站服务器吗知乎关键词搜索排名
  • 塘厦镇做网站百度的营销推广模式
  • 山西做网站公司指数基金投资指南
  • 如何把做的网站放到百度上郴州网络推广公司排名
  • 苏州网站建设免费长春网站搭建
  • 公司网站建设进度表关键词优化公司电话
  • 可以定制衣服的软件站长seo
  • 青岛定制网站建设推广优化是什么意思?
  • 虚拟主机网站建设过程网页设计主题参考
  • 网站图片属性是什么好的seo平台
  • 做网站一定要代码吗seo新人怎么发外链
  • 湖南城乡住房建设厅网站大学生网络营销策划书