码迷,mamicode.com
首页 > 编程语言 > 详细

es5语法下,javascript如何判断函数是new还是()调用

时间:2017-07-10 16:52:49      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:==   支持   判断   就会   复制粘贴   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!