js中的call

JavaScript017

js中的call,第1张

java中对象包含属性和方法, 方法即函数, 只有对象可以调用方法

但是js中一切皆对象, 函数是对象, 函数也可以调用方法

Function.prototype.call

Function.prototype.apply

Function.prototype.bind

Function.prototype.toString

为什么js语言会在function原型上挂上这四个函数?

因为好处太多了, 现在我就说一说call的应用

再深入思考一下, call语法是基于什么形成的呢 ?

了解底层语法有助于我们理解高级的语法

因为在底层的语法眼中, 高级语法只不过是工具, 根本不算语法, 不过是由我定义构建处理来的

理解call函数, 核心必要知识

哈哈哈, v8内部的不知道, 反正js基于现有语法就有这个能力 (还有解法, 基于 proto ,原型链的方式, var temp = Object.create(null)), 利用干净的地方, 防止覆盖原对象的函数

显然, 我们自己的上面的mycall还要很多问题

这里我们就实现了自己的call, 以后看见call就知道都不过是些雕虫小技了(当然真实的实现方式肯定需要考虑更多因素和性能, 而且在v8更大的环境下, 可能还不止一种实现方式,保持谦虚)

1.apply与call是更改对象的内部指针,即改变对象的this指向的内容;

2.call与apply的第一个参数都是要传入给当前对象的对象,及函数内部的this,后面的参数都是传递给当前对象的参数。

详细用法如下:

1.call()

语法:obj1.call(obj2[,param1,param2,...]);

定义:用obj2对象来代替obj1,调用obj1的方法。即将obj1应用到obj2上;

说明:call 方法可以用来代替另一个对象调用一个方法,call 方法可将一个函数的对象上下文从初始的上下文改变为由 obj2 指定的新对象,如果没有提供 obj2参数,那么 Global 对象被用作 obj2。

2.apply()

语法:obj1.call(obj2[,arrArg]);

定义:用obj2对象来代替obj1,调用obj1的方法,即将obj1应用到obj2上,

说明:call ()和apply()作用一样,但是call()可以接收任何类型的参数,而apply()只能接收数组参数。

3.基本用法

4.继承特性