一直不理解call() 是什么意思啊。。 到底怎么用啊。 call()看上去很高深的样子。
下面是mdn的文档链接
call
bind
apply
对象 A 有属性 attr 和方法 do(); 对象 B 有属性 bttr
B想用A的方法do 怎么调用呢? 你怎么写 不能写成 A.do()啊 这是A调用自身的方法 这是就需要call了 A.do.call(B) 把B call过来 执行方法
这个如果说可以牵扯出JavaScript中太多太多的东西了, 上面haoxin也给出了相关的资料,这里我献丑简单的说下我的理解吧,
haoxin
在JavaScript中最迷人的就是函数,而函数也是对象,所以函数也就拥有了属性和方法,每一个函数都拥有两个属性,一个是length和prototype。这里主要说call()所以其他的就不多说,
length
prototype
call()
在js中每个函数都有两个方法:call(),apply()。这两个方法的作用就是设置函数体内this指向的值。如下面这个例子:
apply()
this
function sum(n1, n2){ return n1 + n2; } function sum1(n1, n2){ return sum.call(this, n1, n2); } console.log(sum1(1, 3)); //结果是4
call传递的参数第一个是运行函数所在的作用域,一般情况我们使用的时候是this.当然也可以直接指定作用域,比如:
var name = "Jim"; var p2 = { name: "Tang", age: 25 }; function say(){ console.log(this.name); } say(); //Jim say.call(p2); //Tang
后面跟多个直接的参数,这个参数也就是当前使用函数的参数个数比如sum()有几个参数就传递几个参数。这个haoxin给的链接说明了call。而apply()只接受两个参数,一个是作用域,一个参数的数组(也可以是arguments对象)。这个你可以参考上面的链接资料。
sum()
当然call()的真正作用还很大。它的作用还可以发挥在继承上面,这里演示一种继承方式:
继承
function P1(name){ this.name = name; this.say = function(){ console.log('my name is %s', this.name); }; } function P2(name){ P1.call(this, name); } var p = new P2("Jim"); p.say(); //这里的结果就是‘my name is Jim’
熟练使用call()可以帮助我们很多!
ls 答案赞
这个解释有点意思
写的不错 赞!
function b(){ 有个锅 }
function a(){ 会炒菜 }
b说:a 帮我炒个菜 a说:好的,你先把你的锅给我,再找几份个原料,
a.call(b,原料1,原料2,…);
// function P2(name){ P1.call(this, name); } p2 啥也不会,但是知道p1会,于是对外宣称自己会,底下和p1商量,你帮我来但是得算我的。
@mq1980哈哈哈哈你该去2楼的
@mq1980 说的不错
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
下面是mdn的文档链接
call
bind
apply
对象 A 有属性 attr 和方法 do(); 对象 B 有属性 bttr
B想用A的方法do 怎么调用呢? 你怎么写 不能写成 A.do()啊 这是A调用自身的方法 这是就需要call了 A.do.call(B) 把B call过来 执行方法
这个如果说可以牵扯出JavaScript中太多太多的东西了, 上面
haoxin也给出了相关的资料,这里我献丑简单的说下我的理解吧,在JavaScript中最迷人的就是函数,而函数也是对象,所以函数也就拥有了属性和方法,每一个函数都拥有两个属性,一个是
length和prototype。这里主要说call()所以其他的就不多说,在js中每个函数都有两个方法:
call(),apply()。这两个方法的作用就是设置函数体内this指向的值。如下面这个例子:call传递的参数第一个是运行函数所在的作用域,一般情况我们使用的时候是this.当然也可以直接指定作用域,比如:后面跟多个直接的参数,这个参数也就是当前使用函数的参数个数比如
sum()有几个参数就传递几个参数。这个haoxin给的链接说明了call。而apply()只接受两个参数,一个是作用域,一个参数的数组(也可以是arguments对象)。这个你可以参考上面的链接资料。当然
call()的真正作用还很大。它的作用还可以发挥在继承上面,这里演示一种继承方式:熟练使用
call()可以帮助我们很多!ls 答案赞
这个解释有点意思
写的不错 赞!
function b(){ 有个锅 }
function a(){ 会炒菜 }
b说:a 帮我炒个菜 a说:好的,你先把你的锅给我,再找几份个原料,
a.call(b,原料1,原料2,…);
// function P2(name){ P1.call(this, name); } p2 啥也不会,但是知道p1会,于是对外宣称自己会,底下和p1商量,你帮我来但是得算我的。
@mq1980哈哈哈哈你该去2楼的
@mq1980 说的不错