JS构造函数与普通函数的区别

1、直观上
  • 构造函数都应该以 一个大写字母开头:
function Foo(){...}
  • 非构造函数则应该以一个小写字母开头:
    (本文所说的普通函数就是 非构造函数)
function foo(){...}
2、本质区别

无论是构造函数还是非构造函数,两者并没有实质性的区别;构造函数可以作为普通函数使用,普通函数也可以作为构造函数来用;首字母大小写仅仅是为了在开发中能易于区分他们。


无论什么函数:

  • 只要通过 new 操作符来调用,那就是作为构造函数使用,此时this指向new出的实例
  • 如果不通过 new 操作符来调用,那就是作为普通函数使用;此时,在非严格模式下this都指向window
function foo(name){
	this.name = name;
}
function Foo(name){
	this.name = name;
}

//当构造函数用:this都指向实例
console.log(new Foo('bty1'));   //Foo {name: "bty1"}
console.log(new foo('bty2'));   //foo {name: "bty2"}

//当普通函数用:this都指向window
Foo('bty1');
console.log(window.name);  //'bty1'

foo('bty2')
console.log(window.name);  //'bty2'

从原型链角度看,它们还是没啥区别:

console.log(foo.__proto__ === Function.prototype); //true
console.log(Foo.__proto__ === Function.prototype); //true
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值