博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
es5语法下,javascript如何判断函数是new还是()调用
阅读量:4507 次
发布时间:2019-06-08

本文共 974 字,大约阅读时间需要 3 分钟。

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

 

转载于:https://www.cnblogs.com/wl843022618/p/7145834.html

你可能感兴趣的文章
ajax 整理
查看>>
Programming Erlang_CHAPTER2_Basic Erlang 学习笔记(2)。
查看>>
Linux基础
查看>>
2019北航软工暑期班作业-预培训个人项目(地铁线路规划)
查看>>
【模板】高精度
查看>>
弱弱的玩下Javascript
查看>>
二叉树相关操作
查看>>
在webstorm开发微信小程序之使用阿里自定义字体图标
查看>>
序列化模块/模块/包
查看>>
eclipse maven plugin 插件 安装 和 配置
查看>>
C# Access中OLE对象的操作
查看>>
收集一些复杂有用的正则表达式
查看>>
子数组求和之大数溢出
查看>>
POJ 2386/栈:计算水堆数
查看>>
记叙在人生路上对你影响最大的三位老师
查看>>
浏览器预览office文件(word,Excel,等)
查看>>
【转】C#中Abstract和Virtual
查看>>
实例讲解如何使用C++操作MySQL数据库类
查看>>
Pivotal tc Server Integration for Eclipse
查看>>
表单验证
查看>>