javascript中//var func与new func()是什么关系?

mirro 2018-11-11 10:40:12

function foo(){
this.b = 100;
return this.a;
};
var func = foo.bind({a:1});
func() // 1
new func() // {b:100}
...全文
348 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hk3475 2018-12-05
  • 打赏
  • 举报
回复
bind是一个高阶函数,传入的参数就是它要绑定的this,然后输出的也是一个函数
hn_tzy 2018-11-21
  • 打赏
  • 举报
回复 1
function foo(){
this.b = 100;
return this.a;
};//这是声明和定义一个函数,它相当于在window这个全局对象上新建了一个foo方法,当中的this要在调用的时候才能具体确定。

foo();//这样调用时,foo内的this指向window,返回的是window.a,为undefined,你可以打开window变量看到window.b为100

var func = foo.bind({a:1}); //这相当于重新生成了一个新的名为func的函数,函数体内容和foo是一样的,但是在任何情况下调用func(),它的
//this指向{a:1}这个匿名对象。
func() // 1 {a:1}这个匿名对象的a属性为1
new func() // {b:100} 使用new时,不是调用函数,这时函数相当于一个构造函数,返回一个新的对象,它继承了构造函数原型(func.prototype)中
//的属性和方法。理解为返回的是func类型的一个对象。当中的this指向这个新的对象。如果构造函数中返回的不是一个对
//象,其中的return语句会被忽略,而返回这个新对象本身,所以得到的是{b:100}
mirro 2018-11-15
  • 打赏
  • 举报
回复
引用 2 楼 jslang 的回复:
func 是一个用bind()方法为函数内this恒定的绑定了{a:1}对象的函数。 但是当用new func()时会忽略bind()方法对this的绑定。而是创建一个新的对象传给函数内的this。
当用new func()时会忽略bind()方法对this的绑定。而是创建一个新的对象传给函数内的this //这句话的意思是bind()方法重新绑定 new func()函数?
天际的海浪 2018-11-15
  • 打赏
  • 举报
回复
引用 3 楼 mirro187 的回复:
[quote=引用 2 楼 jslang 的回复:] func 是一个用bind()方法为函数内this恒定的绑定了{a:1}对象的函数。 但是当用new func()时会忽略bind()方法对this的绑定。而是创建一个新的对象传给函数内的this。
当用new func()时会忽略bind()方法对this的绑定。而是创建一个新的对象传给函数内的this //这句话的意思是bind()方法重新绑定 new func()函数?[/quote] 只是忽略bind()方法对this的绑定。不会重新绑定
天际的海浪 2018-11-15
  • 打赏
  • 举报
回复
func 是一个用bind()方法为函数内this恒定的绑定了{a:1}对象的函数。 但是当用new func()时会忽略bind()方法对this的绑定。而是创建一个新的对象传给函数内的this。
阿拉曼无悔 2018-11-14
  • 打赏
  • 举报
回复
每个函数都有一个bind方法,该方法可以用来创建新的函数,称为绑定函数。在调用新创建的函数时,就会调用原来的那个函数,只不过其中一些参数是预先就绑定好的 也就是说:func 是bind新创建的函数,fun()回调用 foo()返回this.a;new func()则是通过构造函数创建对象 创建出的对象有个属性 b 值为100 不知道这样说明白了没有

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧