最近再学习 javascript 设计模式
第一个 单例模式中 有个例子 如下:
<body>
<button id="loginBtn">登录</button>
<script type="text/javascript">
var createLoginLayer = function(){
var div = document.createElement("div");
div.innerHTML = '我是登录浮窗';
div.style.display = 'none';
document.body.appendChild(div);
return div;
};
var getSingle = function(fn){
var result;
return function(){
return result || (result = fn.apply(this,arguments));
}
};
var createSingleLoginLayer = getSingle(createLoginLayer);
document.getElementById('loginBtn').onclick = function(){
var loginLayer = createSingleLoginLayer();
loginLayer.style.display = 'block';
};
</script>
</body>
实现是 需要登录框时 点击登录时 只出现一个登录框 其中
var getSingle = function(fn){
var result;
return function(){
return result || (result = fn.apply(this,arguments));
}
};
这段代码中fn.apply(this,arguments) 不知道怎么理解 用断点查看 其中的this指向window 但是我用fn();替换也是可以的 不知道fn.apply(this,arguments)这段代码怎么理解 我知道apply() 这个第一个参数是绑定上下文用的, 是否当createSingleLoginLayer()被调用时this是否指向createSingleLoginLayer本身 请解答下
this 不是指向createSingleLoginLayer的,指向window .其实这里的this没有用。
之所以用fn.apply(this,arguments)而不用fn(),是因为要传参数,而且参数的个数不固定。
不是啊,要看fn中有没有用到this中的属性或方法,如果没有这里传null也没有关系。
请问是不是可以这样理解 如果在一个函数中 就像
var getSingle = function(fn){
var result;
return function(){
return result || (result = fn.apply(this,arguments));
}
};
只要有fn.apply(this,arguments) 这种写法。 this就没有用 只是因为参数的个数不固定 所以才这样写