具名函数的各种调用方式
在一年前已经总结过了。
这篇看看如何判断一个函数是被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调用”,显然不对
呃,还有更好的方法吗?
分享到:
相关推荐
在JavaScript中,判断函数是通过new运算符创建实例的方式调用,还是通过普通函数调用,通常涉及到几种不同的方法和它们的局限性。下面将详细介绍每种判断方式及其适用场景和潜在问题。 首先,为了区分new调用和普通...
在 BluetoothService.java 中,构造函数中 new 了 BluetoothManagerService 类的实例,并在 onStart 方法中进行了服务的初始化。该服务的开启是 Android 11 中蓝牙模块的核心组件。 二、BluetoothEnabler 的开关...
由于构造函数的行为可以被函数内部的返回语句所改变,所以开发者需要根据具体函数的设计来判断调用时是否使用new关键字,以及可能得到的结果。 总结来说,当我们使用new关键字调用一个函数时,如果函数内部没有返回...
在 VB6.0 编写的 DLL 中,我们定义了一个名为 `jia` 的函数,该函数接受三个整数参数 `a`、`b` 和 `c`,并返回一个布尔值。如果三个参数都满足某个条件,我们就返回 `True`,否则返回 `False`。 ```vb Public ...
系统调用是一种特殊的子程序,由操作系统内核提供,用户程序通过特定的接口(通常在C语言中是`syscall()`函数)调用。当执行系统调用时,处理器会切换到内核模式,执行相应的内核代码,然后返回到用户模式,确保了...
而嵌入式开发主要采用Qt平台实现,因此实现跨平台函数调用是实现算法跨平台调用的关键。 知识点1: Visual Studio中的Python环境配置 在Visual Studio中,需要配置Python环境,以便在C++程序中调用Python函数。...
C++中提供了多种字符串和字符处理函数,例如`isalpha`、`islower`、`ispunct`、`isspace`、`isupper`等,用于判断字符的属性。对应的头文件是`<cctype>`。 三、算法和迭代器 C++标准库提供了大量的算法函数,例如`...
通常会有一个回调函数来处理扫描完成后的图像数据。 ```csharp twain.AcquireAsync((image) => { // 在这里处理扫描到的图像 }); ``` 5. **保存和处理图像**:扫描完成后,图像数据通常会被转换为Bitmap对象,你...
因此,在使用上述方法来强制构造函数的new调用时,需要考虑未来的兼容性问题。 此外,作者还提及了jQuery库中的$函数,它在创建jQuery对象时也没有使用new关键字。jQuery内部实现了自己的new操作符功能,使得在不...
在微信小程序开发中,函数调用是实现各个功能的关键,本文将详细介绍几种常见的函数调用方法,帮助开发者更好地理解和运用。 一、调取参数直接调用 在同一个JS文件内部,可以直接调用定义的函数。例如,我们有一个`...
`sample.txt`可能是示例的输入数据或使用说明,用户可以通过阅读此文件了解如何准备JSON数据和调用函数。而`.srf`文件是PowerBuilder的资源文件,可能包含了函数的用户界面元素或相关设置,这些资源可以被Power...
在编程领域,有时我们需要超越语言本身的功能,利用操作系统提供的服务,这时就需要调用操作系统的API(Application Programming Interface)函数。本文将深入探讨如何在C#中调用Windows API函数,特别是针对修改...
在构造函数被执行时,对象尚未完成构建,因此编译器无法判断对象是否属于当前类或其派生类。如果构造函数是虚函数,则需要动态绑定,而这依赖于对象的动态类型。但在构造过程中,对象的动态类型尚未确定,导致无法...
在Android开发中,调用第三方地图导航应用如高德、百度和...以上就是关于在Android中调用第三方导航应用、坐标转换以及判断应用是否存在的详细知识点。在实际开发中,这些操作都需要结合具体的业务需求进行调整和优化。
3. 调用函数或方法,传入年份进行判断。 4. 根据函数或方法的返回结果,输出相应的信息。 通过以上分析,我们可以看到,虽然C语言和Java语言的语法有所不同,但解决同一个问题的基本思路是一致的。它们都利用了条件...
QProcess *process = new QProcess(this); process->start("/path/to/external/app", {"arg1", "arg2"}); ``` 在上述代码中,`/path/to/external/app`是你想要调用的外部程序,而`"arg1"`和`"arg2"`是传递给该程序...
在编译期,虚函数并不会被静态编译,而是在运行期根据对象实例来动态判断要调用的函数。 在调用虚函数时,系统会首先检查对象的申明类,看是否有该虚函数的声明,如果有,那么它就不会立刻执行该函数,而是转去检查...
2. **比较运算**: 支持大于、小于、等于、不等于等逻辑判断。 3. **内置函数**: 提供了一系列常用的数学函数如最大值、最小值等。 4. **自定义函数**: 允许用户自定义函数来扩展类的功能。 #### 实现原理与关键代码...
C++函数实验旨在深入理解和掌握C++中的函数概念和应用,包括定义、声明、参数传递、函数嵌套、递归调用以及不同类型的变量。以下是根据实验内容详细讲解的知识点: 1. **定义函数**:函数是C++中模块化编程的基础,...