标签:== 支持 判断 就会 复制粘贴 cti ons 粘贴 this
es5语法没有支持类class,但是可以通关函数来申明一个类,如下:
function Person(name){
this.name=name;
}
var john=new Person(‘john‘);
console.log(john.name);//john
但是这个类可以直接像函数执行那样调用:Person()
判断是不是被new还是()调用得这样修改上面这个类:
function Person(name){
this.name=name;
if(this instanceof Person){
alert(‘new调用‘);
}else{
alert(‘函数调用‘);
}
}
new Person(‘xiaoqiang‘)//=> new调用
Person(‘xiaoqiang‘)//=>函数调用
还以用写法可以方便复制粘贴到任何类里面如下:
写法1:
function Person(name){
this.name=name;
if(this instanceof arguments.callee){
alert(‘new调用‘);
}else{
alert(‘函数调用‘);
}
}
new Person(‘xiaoqiang‘)//=> new调用
Person(‘xiaoqiang‘)//=>函数调用
写法2:
function Person(name){
this.name=name;
if(this.constructor === arguments.callee){
alert(‘new调用‘);
}else{
alert(‘函数调用‘);
}
}
new Person(‘xiaoqiang‘)//=> new调用
Person(‘xiaoqiang‘)//=>函数调用
看似上面三种写法都很完美,但是如何如下调用你就会蒙蔽
var jack=new Person(‘jack‘); //=>new 调用
jack.f=Person
jack.f(‘不信你试试‘) //=> new 调用
es5语法下,javascript如何判断函数是new还是()调用
标签:== 支持 判断 就会 复制粘贴 cti ons 粘贴 this
原文地址:http://www.cnblogs.com/wl843022618/p/7145834.html