JavaScript中判断函数是new还是()调用的区别说明_Javascript教程-查字典教程网
JavaScript中判断函数是new还是()调用的区别说明
JavaScript中判断函数是new还是()调用的区别说明
发布时间:2016-12-30 来源:查字典编辑
摘要:方式1复制代码代码如下:functionPerson(n,a){this.name=n;this.age=a;if(thisinstance...

方式1

复制代码 代码如下:

function Person(n,a){

this.name = n;

this.age = a;

if(this instanceof Person){

alert('new调用');

}else{

alert('函数调用');

}

}

var p = new Person('jack',30); // --> new调用

Person(); // --> 函数调用

方式2

复制代码 代码如下:

function Person(n,a){

this.name = n;

this.age = a;

if(this instanceof arguments.callee){

alert('new调用');

}else{

alert('函数调用');

}

}

var p = new Person('jack',30); // --> new调用

Person(); // --> 函数调用

方式3

复制代码 代码如下:

function Person(n,a){

this.name = n;

this.age = a;

if(this.constructor === arguments.callee){

alert('new调用');

}else{

alert('函数调用');

}

}

var p = new Person('jack',30); // --> new调用

Person(); // --> 函数调用

看似很完美,但当把函数/类作为自身实例对象的方法时调用就出问题了

复制代码 代码如下:

function Person(n,a){

this.name = n;

this.age = a;

if(this.constructor === arguments.callee){

alert('new调用');

}else{

alert('函数调用');

}

}

var p = new Person('jack',30); // 先new一个对象

p.fn = Person; // 把函数/类 Person 赋值给自身对象p的fn属性

p.fn(); // 这句调用时提示“这是new调用”,显然不对

还有更好的方法吗?

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类