標籤:== 支援 判斷 就會 複製粘貼 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還是()調用