首页 web前端 js教程 JavaScript中判断函数是new还是()调用的区别说明_javascript技巧

JavaScript中判断函数是new还是()调用的区别说明_javascript技巧

May 16, 2016 pm 06:08 PM
new 判断函数

方式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调用”,显然不对

还有更好的方法吗?
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

go语言中make和new的区别是什么 go语言中make和new的区别是什么 Jan 09, 2023 am 11:44 AM

区别:1、make只能用来分配及初始化类型为slice、map、chan的数据;而new可以分配任意类型的数据。2、new分配返回的是指针,即类型“*Type”;而make返回引用,即Type。3、new分配的空间会被清零;make分配空间后,会进行初始化。

java中的new关键字怎么使用 java中的new关键字怎么使用 May 03, 2023 pm 10:16 PM

1.概念在Java语言里,“new”表达式是负责创建实例的,其中会调用构造器去对实例做初始化;构造器自身的返回值类型是void,并不是“构造器返回了新创建的对象的引用”,而是new表达式的值是新创建的对象的引用。2.用途新建类的对象3.工作机制为对象成员分配内存空间,并指定默认值对成员变量进行显式初始化执行构造方法计算并返回引用值4.实例new操作往往意味着内存中的开辟新的内存空间,这个内存空间分配在内存中的堆区,受到jvm控制,自动进行内存管理。这里我们就是用String这个类来举例说明。pu

js中new操作符工作原理是什么 js中new操作符工作原理是什么 Feb 19, 2024 am 11:17 AM

js中new操作符工作原理是什么,需要具体代码示例js中的new操作符是用来创建对象的关键字。它的作用是根据指定的构造函数创建一个新的实例对象,并返回该对象的引用。在使用new操作符时,实际上进行了以下几个步骤:创建一个新的空对象;将该空对象的原型指向构造函数的原型对象;将构造函数的作用域赋给新对象(因此this指向了新对象);执行构造函数中的代码,并给新对

常用的excel判断函数分享 常用的excel判断函数分享 Mar 19, 2024 pm 09:30 PM

Excel表格存在于各行各业,无论你是职场工作人员还是老师,甚至是国家机关工作人员,都要频繁用到Excel工具,掌握好Excel操作技巧能够让自己的工作增光添彩,必要时能助力自己升职加薪。本文小编主要为大家分享常用的Excel判断函数。一、常用的excel判断函数1、IF函数:根据条件判断返回不同的值;语法=IF(条件判断,结果为真返回值,结果为假返回值)2、OR函数:对多个逻辑条件进行判断;语法=OR(条件1=标准1,条件2=标准2,......条件N=标准N)3、AND函数:多条件同时成立;

新款富士固定镜头 GFX 相机将首次推出新的中画幅传感器,可能开启全新系列 新款富士固定镜头 GFX 相机将首次推出新的中画幅传感器,可能开启全新系列 Sep 27, 2024 am 06:03 AM

近年来,富士胶片取得了很大的成功,这主要归功于其胶片模拟技术以及其紧凑型测距相机在社交媒体上的流行。然而,据 Fujirumors 称,它似乎并没有满足于现状。你

如何使用Java中的clone()方法替代new关键字? 如何使用Java中的clone()方法替代new关键字? Apr 22, 2023 pm 07:55 PM

使用clone()代替new在Java中新建对象实例最常用的方法是使用new关键字。JDK对new的支持非常好,使用new关键字创建轻量级对象时,速度非常快。但是,对于重量级对象,由于对象在构造函数中可能会进行一些复杂且耗时的操作,因此,构造函数的执行时间可能会比较长。导致系统短期内无法获得大量的实例。为了解决这个问题,可以使用Object.clone()方法。Object.clone()方法可以绕过构造函数,快速复制一个对象实例。但是,在默认情况下,clone()方法生成的实例只是原对象的浅拷

java中如何使用new实例化 java中如何使用new实例化 May 16, 2023 pm 07:04 PM

1.概念就是“创建一个Java对象”-----分配内存并返回指向该内存的引用。2.注意事项(1)Java关键字new是一个运算符。与+、-、*、/等运算符具有相同或类似的优先级。(2)创建一个Java对象需要三步:声明引用变量、实例化、初始化对象实例。(3)实列化之前会默认调用父类的无参构造,也就是要创建父类的对象3.两种实例化方法(1)对象名=new类名(参数1,参数2...参数n);对象名.方法();(2)new类名(参数1,参数2...参数n).方法;4.实例用一个简单的代码来说明使对象实

See all articles