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 调用

 

相关文章:

  • 2022-03-02
  • 2021-05-28
  • 2021-11-20
  • 2022-12-23
  • 2021-08-16
  • 2021-06-13
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-10
  • 2021-12-09
  • 2021-09-02
  • 2022-12-23
  • 2022-12-23
  • 2021-06-05
  • 2022-12-23
相关资源
相似解决方案