var Bind = function(object, fun) {
return function() {
return fun.apply(object, arguments);
}
}var BindAsEventListener = function(object, fun) {
var args = Array.prototype.slice.call(arguments).slice(2);
return function(event) {
return fun.apply(object, [event || window.event].concat(args));
}
}
请问各位大大,上面的function为什么要用两次return?
这种写法有什么好出?
直接用
var Bind = function(object,fun){
fun.apply(object,arguments);
}不行么?
return function() {
return fun.apply(object, arguments);
}
}var BindAsEventListener = function(object, fun) {
var args = Array.prototype.slice.call(arguments).slice(2);
return function(event) {
return fun.apply(object, [event || window.event].concat(args));
}
}
请问各位大大,上面的function为什么要用两次return?
这种写法有什么好出?
直接用
var Bind = function(object,fun){
fun.apply(object,arguments);
}不行么?
解决方案 »
- 怎么用jquery实现这个点击隐藏和显示呢?传递自定义参数
- 提问js响应onclick切换图层
- 请教一个表格嵌套正则匹配不出的问题,谢谢!
- JavaScript几个非常怪异的作用域问题!
- 网站被挂马!谁能帮我解密它的挂马代码???
- 通过DOM访问不到我想要的节点,急急急
- 请问Opera下的有关事件
- autocomplete控件 实现tag(只输入Lucy)失去焦点时,做出响应(tagID的值变为1)
- 好久不接触js了,写了个表单验证,错了,但不知道原因,奇葩!
- 怎么响应ActiveX控件数组中某一控件的事件?
- 求助﹕寫一主控台應用程式,列出指定目錄及其子目錄的所有文件名稱,要求用遞歸演算法實現
- js 如何调用其他语言的函数
var BindAsEventListener = function(object, fun) {
var args = Array.prototype.slice.call(arguments).slice(2);
return function(event) {//这里的return是函数BindAsEventListener的
return fun.apply(object, [event || window.event].concat(args));//这里的return是函数fun.apply的
//两个return 是不一样的
}
}
有那位大大能解释一下的吗?或者介绍本书也行。
[event || window.event].concat(args)这一句[event || window.event]中,event莫非是个数组?
你知道bind方法可以有什么好处吗??????
不是说例子里有两个return,
那么以后你也要用两个啊,
你就是用8个也无所谓啊,反正就是后面的东西取得值往前抛呗!event || window.event
这个完全是浏览器兼容的啊,记住就行了,本来你可以在出现event || window.event的地方只写
window.event的,但是firefox不认啊~只有ie下面能跑,
后来有人这么写
function methodname(e)
{
e=event || window.event;
往后的操作都用e代替}
再后来见有人直接把形参也用个event的样子,这倒更省事了!后来有人这么写
function methodname(event)
{
event || window.event;}
有什么好处还请多指教.LS的兄弟,关于event你的解释我知道,我想知道的是[event || window.event]这一句中,[]应该是数组用的吧.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head><body>
<div id="ss" style=" height:100px; width:100px; background-color:#0000FF"></div>
<script type="text/javascript">
var Bind = function(object, fun) {
return function() {
return fun.apply(object, arguments);
}
}var vv = {
id : "wo are pest",
say : function(){
alert(this.id)
}
}
window.onload =function(){ //如果我希望给id为ss的div帮定上say方法 假如我直接赋予
document.getElementById('ss').onclick = vv.say;
/*
可以写成 document.getElementById('ss').onclick = function(){alert(this.id)}
可以看到ss元素调用的函数 所以 this就指向了ss alert出来的就变成了ss
*/
//------------------------------------------------------------------------------------
//如果这么写
//document.getElementById('ss').onclick = Bind(vv,vv.say);
/*
就可以把vv.say这个函数里面的this指向ss元素
当然不紧紧只是可以这么写
Bind(xx,vv.say) xx代表任何对象 也是可以的 只是注意 不要报错了...
这是我认为bind的用法
*/
}
</script></body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head><body>
<div id="ss" style=" height:100px; width:100px; background-color:#0000FF"></div>
<script type="text/javascript">
var Bind = function(object, fun) {
return function() {
return fun.apply(object, arguments);
}
}var vv = {
id : "wo are pest",
say : function(){
alert(this.id)
return this.id
}
}
window.onload =function(){
var ss ={};
ss.ee = Bind(vv,vv.say);
/*
说一下为什么要有return
上面的可以看成
ss.ee = (function(object, fun) {
return function() {
return fun.apply(object, arguments);
})(vv,vv.say);
执行完毕bind函数后 回返回一个function 就成了
ss.ee = function() {
return fun.apply(object, arguments);
}
这就是第一个return 的作用了
当执行ss.ee的时候
如果不要第2个return 会发现 say方法里面的return 的直取不到
*/
var cc = ss.ee();
alert(cc) //可以把Bind方法里面的 第2个renturn去掉试试
//第2个return 是当函数有返回直时用到的
}
</script></body>
</html>