扫码关注官方订阅号
function Fun(){ } var fun1 = new Fun(); var fun2 = new Fun();
ringa_lee
就是判断你的代码执行了几次么。做一个计数不就解决了
先说 @linong 的办法是可行的,
function Fun() { Fun.newCount++; } Fun.newCount = 0;
但是有一个问题,Fun.newCount 谁都可以改。那当然,如果不关心这个问题,后面的内容就可以忽略了。
Fun.newCount
如果不让改怎么办——典型的解决办法,闭包
不得不说,下面的语法是 es6 的,但是可以完全使用 es5 的语法替代。之所以用 es6,是因为我希望能推动 es6 的推广。如果看不懂 es6 语法,请在评论中提出来,我把翻译后的贴在评论中。
const Fun = (function() { // 这是一个闭包起来的变量 let newCount = 0; // 定义 Fun 类 class Fun { // 通过只读属性获得统计值, // 该属性只读,不可写,所以外部不能改变 static get newCount() { return newCount; } constructor() { newCount++; } } return Fun; })(); new Fun(); new Fun(); console.log(Fun.newCount);
上面的示例是用 es6,如果直接在 es6 的环境下运行,这也就算完了。但是如果改写成 es5,或者直接用 es5 的语法来写,就会出现一个新的问题,坑之所在,比如
//... 代码接上面 var a = Fun(); // 注意,没用 new console.log(a, Fun.newCount); // undefined, 3
因为没用 new 关键字,Fun() 返回的是 undefined,但是仍然增加了计数。解决办法有两个
new
Fun()
undefined
判断不是 new 调用,就不计数
将非 new 调用转换为 new 调用
这两种解决办法的根本其实就是一个,判断是否 new 调用。网上讲解决办法的比较多,就不细说了,给个参考:JavaScript中判断函数是new还是()调用
https://segmentfault.com/q/10...
fun1===fun2//?true就一次,false就两次
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
就是判断你的代码执行了几次么。做一个计数不就解决了

先说 @linong 的办法是可行的,
但是有一个问题,
Fun.newCount谁都可以改。那当然,如果不关心这个问题,后面的内容就可以忽略了。严谨一点的解决方案
如果不让改怎么办——典型的解决办法,闭包
还有一个坑
上面的示例是用 es6,如果直接在 es6 的环境下运行,这也就算完了。但是如果改写成 es5,或者直接用 es5 的语法来写,就会出现一个新的问题,坑之所在,比如
因为没用
new关键字,Fun()返回的是undefined,但是仍然增加了计数。解决办法有两个判断不是
new调用,就不计数将非
new调用转换为new调用这两种解决办法的根本其实就是一个,判断是否
new调用。网上讲解决办法的比较多,就不细说了,给个参考:JavaScript中判断函数是new还是()调用https://segmentfault.com/q/10...
fun1===fun2//?true就一次,false就两次