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


Posted in Javascript onApril 07, 2011

方式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 相关文章推荐
Javascript与flash交互通信基础教程
Aug 07 Javascript
JavaScript 题型问答有答案参考
Feb 17 Javascript
javascript不可用的问题探究
Oct 01 Javascript
javascript修改图片src的方法
Jan 27 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
Aug 11 Javascript
js 发布订阅模式的实例讲解
Sep 10 Javascript
JSON 数据格式详解
Sep 13 Javascript
五步轻松实现JavaScript HTML时钟效果
Mar 25 Javascript
angular2中Http请求原理与用法详解
Jan 11 Javascript
VUEX 数据持久化,刷新后重新获取的例子
Nov 12 Javascript
TypeScript的安装、使用、自动编译的实现
Apr 10 Javascript
jQuery实现简单全选框
Sep 13 jQuery
JavaScript中清空数组的三种方法分享
Apr 07 #Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
Apr 07 #Javascript
javascript各浏览器中option元素的表现差异
Apr 07 #Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
Apr 07 #Javascript
我的javascript 函数链之演变
Apr 07 #Javascript
JavaScript中链式调用之研习
Apr 07 #Javascript
js中各浏览器中鼠标按键值的差异
Apr 07 #Javascript
You might like
php 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
PHP文件注释标记及规范小结
2012/04/01 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
JavaScript监听和禁用浏览器回车事件实例
2015/01/31 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
微信小程序 Buffer缓冲区的详解
2017/07/06 Javascript
node实现简单的反向代理服务器
2017/07/26 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
Vue实现本地购物车功能
2018/12/05 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
python实现决策树
2017/12/21 Python
python元组的概念知识点
2019/11/19 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
构建高效的python requests长连接池详解
2020/05/02 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
工作自荐信
2013/12/11 职场文书
大学生怎样写好自荐信
2014/02/25 职场文书
煤矿安全生产标语
2014/06/06 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
使用CSS实现黑白格背景效果
2022/06/01 HTML / CSS
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers