具名函数的各种调用方式
在一年前已经总结过了。
这篇看看如何判断一个函数是被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调用”,显然不对
呃,还有更好的方法吗?
分享到:
相关推荐
具名函数的各种调用方式 在之前篇幅中已经介绍过了。这篇看看如何判断一个函数是被new调用的,还是被其它方式调用的。
1.vue源码读取流程 1.new Vue 调用的是 Vue.prototype._init 从该函数开始经过 $options 参数合并之后 initLifecycle 初始化生命周期标志初始化事件,初始化渲染函数。初始化状态就是数据。把数据添加到观察者中实现...
安卓拨号Dail是基于eclipce andriod平台开发的软件,主要功能是调用。 本软件只是模仿简单的函数调用。... 通过TextUtils.isEmpty函数判断电话号码是否为空。 最后添加android.permission.CALL PHONE权限,最终调
//这个变量用于判断滚动条是否已经到了尽头 this.mTimeToScroll = timeToScroll; //设定多少时间滚动一次 this.mMarqueesHeight = marqueesHeight; //内容区高度 this.marqueesWidth=marqueesWidth;//内容区宽度...
用 Python 编写的判断素数的代码 def is_prime(n): if n return False for i in range(2, int...然后,在 main 部分,通过用户输入一个正整数,并调用 is_prime 函数判断该数是否为素数。根据返回值打印相应的结果
7、对于普通的VC++控制台程序,无论全局变量还是全局对象,程序运行时,在加载main函数之前,就已经为它们 分配了内存空间。对于一个全局对象来说,此时就会调用该对象的构造函数,构造该对象,并进行初始化操作 8、...
47.当在超链接中调用JS函数时用:(javascript:)来开头后面加函数名 48.在老的浏览器中不执行此JS:<!-- //--> 49.引用一个文件式的JS:<script type="text/javascript" src="aaa.js"></script> 50.指定在不支持脚本的...
在学习构造函数之前我们需要知道我们学习构造函数需要学习什么: ...2.当我们需要调用构造函数时我们需要new <构造函数>,也就是产生一个实例化对象。 function Student(name,age,sex,height){ this.name=name;
es5的构造函数前面如果不用new调用,this指向window,对象的属性就得不到值了,所以以前我们都要在构造函数中通过判断this是否使用了new关键字来确保普通的函数调用方式都能让对象复制到属性 function Person( uName ...
你只能调用下面位数不多的几个public成员函数,调用Destroy成员函数后,则就可以了,因为它会关闭线程。 其实你会发现下面的public成员函数操作的成员变量都是新增的成员变量,没涉及到线程同步问题。 class ...
文章目录调用位置绑定规则一、 默认绑定严格模式二、隐式绑定隐式丢失三、显示绑定硬绑定API调用的“上下文”四、new绑定箭头函数中的this指向判断this的优先级 调用位置 在理解this得绑定过程之前,首先要理解调用...
话框类,将其加入工程中,然后在程序中调用自己新建的对话框类来实现多窗口。 实现过程: 1.首先新建Qt4 Gui Application 工程,工程名为nGui,Base class 选为QWidget。 建立好后工程文件列表如下图。 2.新建对话...
[ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ] --假设要处理的表名为: tb --判断要添加列的表中是否有主键 if exists(select 1 from sysobjects where parent_obj=object_id('tb') and xtype...
下面选项中,不正确的调用是( c )。 (a) double x = 2.17 ; fun1( x ); (b) int a = 15 ; fun1( a*3.14 ) ; (c) int b = 100 ; fun1( & b ); (d) fun1( 256 ); 3.有函数原型 void fun2( int * ); 下面选项中...
JS和html实现的猜数字小游戏实现码中的JavaScript部分主要是通过两个函数guessNumber()和newGame()来实现猜数字游戏的功能。 当玩家输入数字,点击“猜一下”按钮或按下回车键时,guessNumber()函数会被调用。在该...
ne 调用一次,函数返回true,则调用停止: bool FrameFunc() { if (hge->Input_GetKeyState(HGEK_ESCAPE)) { return true; } return false; } 3. 建立一个WinMain 函数,WinMain 函数是标准的Windows 应用程序入口,...
◆如何在多文档MFC程序中制作独立的File|New菜单?◆ 33 ◆如何检测视是否处于分割状态?◆ 34 ◆如何使程序保持极小状态?◆ 34 ◆如何确定当前进程实例是否为唯一实例?◆ 35 ◆如何向一个文档附加多个视?◆ 35 ...
Number、String函数是特殊的函数,在JS引擎中,他会自动判断是作为构造函数调用还是普通调用,所以既可以使用new关键字,也可以作为函数直接调用。
首先显示的是游戏的背景介绍(图4-1),为此,在类lzhhdm定义Form类对象a,在startApp()函数中判断isSplash是否为真,如果为真的话,将创建Form类的实例a,并且调用append()方法在表单上放置StringItem类的实例以...