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

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

时间: 2024-07-30 04:03:37

es5语法下,javascript如何判断函数是new还是()调用的相关文章

javascript常用判断函数

var isArray = Function.isArray || function(o){ return typeof o === 'object' && Object.prototype.toString.call(o) === '[object Array]'; }

JavaScript中判断原生函数的两个示例

原文链接: Detect if a Function is Native Code with JavaScript原文日期: 2014-08-17翻译日期: 2014-08-20翻译人员: 铁锚 我总是经常碰到需要检查某个function是否是原生代码的情况  -- 这是功能测试中一个很重要的内容: 函数是浏览器内置支持的,还是通过第三方类库模拟的.要检测这一点,最简单的办法当然是判断函数的 toString 方法返回的值啦. JavaScript代码 判断函数是否是原生方法其实相当简单: //

JavaScript中valueOf函数与toString方法

基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下 JavaScript中valueOf函数方法是返回指定对象的原始值.使用方法: object.valueOf( )object是必选项参数是任意固有 JScript 对象. 每个JavaScript固有对象的 valueOf 方法定义不同. 对象 返回值 Array 数组的元素被转换为字符串,这些字符串由逗号分隔,连接在

在 mongodb 终端环境下写多行 javascript 代码、函数

工作中碰到一个问题,需要把某个 collection 中的某些符合条件的数据取出来,逐行处理其中某些字段.mongodb 终端下支持直接写 js 代码.函数,也可以运行 js 文件.1 首先需要设置 mongo 终端的代码编辑器,不设置的话只能输入一行代码文件,无法处理大段 js 逻辑 进入 mongo 终端后,输入 f={} 回车后,继续输入: edit f 未设置过相关系统变量的会收到如下提示: please define EDITOR as a JavaScript string or a

javascript在IE下不能用 trim函数解决方法

javascript 的trim 函数在firefox 下面使用没有问题 Js代码   <script language="javascript"> var test1 = "    aa    "; test1 = test1.toString(); test1 = test1.trim(); </script> 在火狐下这样用没有问题, 但是在IE下就报错那么我们可以修改一下 Js代码   String.prototype.trim=fu

JavaScript权威指南 - 函数

函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对于其他面向对象语言,在JavaScript中的函数是特殊的,函数即是对象.JavaScript可以把函数赋值给变量,或者作为参数传递给其他函数,甚至可以给它们设置属性等. JavaScript的函数可以嵌套在其他函数中定义,这样定义的函数就可以访问它们外层函数中的任何变量.这也就是所谓的"闭包&qu

JavaScript中的函数有什么特点? 应该怎样优化?

函数 与 优化 1. 函数构造方法: js中所有函数的构造函数都是Function,包括Function本身,(Function是自己的实例,也是自己的构造函数) 证明: Function.prototype === Function.__proto__ 1.1 函数声明: function 函数名(){} 1.2函数表达式: var 函数名 = function(){}; 1.3构造函数: var 函数名 = new Function(参数1,参数2,函数体); 1. 不传参数创建出来的是空函

谈谈Javascript的匿名函数

JQuery 里面有这么一种代码: (function(){ // code here })(); 当一个匿名函数被括起来,然后再在后面加一个括号,这个匿名函数就能立即运行起来,神奇吧! 要说匿名函数,我们首先要由函数本身说起.函数的定义如下:函数是将唯一的输出值赋予给每一输入的“法则”.偏关县信访局 当然,这只是数学上的定义.但是,在计算机编程语言中,函数的定义也八九不离十.因为我们都知道,计算机中的函数,也类似数学定义中的描述,它是将输入的若干数据,经过代码设定的逻辑操作处理后,返回唯一的输

javascript 创建ajax函数 &quot;四部曲&quot;

开门见山简要的来写一个ajax函数,方便要用到ajax的时候来调用,下面附:获取 json 数据一个小实例,请在服务器下执行...   创建一个 ajax.js 文件把ajax函数代码放进去 //创建ajax函数四部曲  1.创建创建XMLHttpRequest对象   2.连接服务器   3.发送请求   4.接收数据 function ajax(url,sueeccd,lose){ // 1.创建XMLHttpRequest对象 //定义一个全局变量 var xhr = null; //判断