关于JS单例模式的一个问题
function Demo(name) {
this.name = name;
}
var getSingle = function(fn) {
var result;
return function() {
console.log(arguments.length);
return result || (result = fn.apply(this, arguments));
}
};
const aa = new getSingle(Demo)('a');
const bb = new getSingle(Demo)('b');
console.log(aa === bb); //true
console.log(aa.name); // TypeError: aa is undefined
console.log(bb); // undefined
为什么aa.name
和bb
未定义呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这个是在终端打出的结果,中文翻译,你认为的name并不能够读取到,
const aa = new (getSingle(Demo))('a'); 加括号可以解决undefined的问题,
但是单例不是这么写的:
result = fn.apply(this, arguments):result永远为undefined,这明显是写错了;
而且每次执行getSingle 都会var result,光这一点就可以看出来这绝对不是单例写法了
1.运算符优先级的问题
2.每次走getSingle 都会重新定义result 返回新function 所以你那样调即便成功了也不会相等
--------更新
需用借用
ES6
的语法,ES5
的话我实在想不出来-------------原答案
运算符优先级问题,加上两个括号就好了,否则会把
getSingle
当作了构造函数。运算符优先级