求助js的问题(或许是关于命名)
发布于 8 年前 作者 ajaxQWER 3547 次浏览 来自 问答

上代码: var obj1 = { name:“obj1”, getName:function(){ console.log(this.name) } } var obj2 = { name:“obj2” } var name = obj1.getName; typeof(name) //string 这里name的类型是字符串 name //"function(){console.log(this.name)}" name.apply(obj2) //报错 name.apply is not a function 如果把name改成其他的如: var name1 = obj1.getName; name1.apply(obj2) //obj2 请问一下 这个是为什么

4 回复

@zhengjun87 为什么这里的name被认为了对象中的name,typeof(name)//string

@ajaxQWER apply函数的作用就是将name这个函数上下文绑定到了obj2,而obj2中有name这个属性,所以原先函数name被字符串name替代了,我是这么理解的

@zhengjun87 知道了,这里的name是全局的,刚好window有个name属性,所以冲突了

这个问题在node环境是不存在的,window比较特殊,一个函数赋值给window.name会变成先toString再赋值

回到顶部