js借用和绑定

var one = {
    name:"object",
    say:function(greet) {
        return greet + ","+this.name;
    }
}
//console.log(one.say("hi"));  //结果hi,object
var two = {
    name:"another"
};
console.log(one.say.apply(two,["hello"]));  //结果hello,another

借用say()方法内部的this指向了two对象。

但是在如果将函数指针复制给一个全局变量,或者将该函数作为回调函数来传递,整个代码就可能不会像预期那样运行。如下:

//给变量赋值,“this”将会指向全局变量
var say = one.say;
console.log(say("you")); //结果you,undefined

//作为回调函数使用
var yetanother = {
    name:"yet",
    method:function(callback){
        return callback("HOHO");
    }
}
console.log(yetanother.method(one.say));//结果HOHO,undefined

这时候可以使用下面一个函数来解决

function bind(o,m){
    return function(){
        return m.apply(o,[].slice.call(arguments));
    }
}

可以使用上面的函数绑定对象和需要借用的方法。

var twoSay = bind(two,one.say);
console.log(twoSay("jie"));  //jie,another
时间: 2024-10-14 20:44:02

js借用和绑定的相关文章

JS基础——事件绑定

上一篇博客JS事件对象中,老师问JS事件处理和VB中的事件处理有什么联系?先来解决一下这个问题.举个VB.net中事件处理的例子(JS敲久了,VB习惯的都不熟悉了,看来得经常回顾了): 1.事件处理VB VS JS Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click MsgBox("helo!") MsgBox(sender.width) '弹出触发这个事件对象的宽度 Msg

在js对象上绑定js数组原生方法

在js对象上绑定数组方法会给当前对象添加一个lenght:0属性 例: var o = {}; [].pop.call(o) console.log(o)//返回结果Object {length: 0}

笔记-[6]-js中事件绑定方法的总结

js中的两种对象事件绑定方法: 1:常用的如:div.onclick=function(){...}; 2:通过系统方法绑定事件: 非IE:addEventListener('事件名[不加on]',function(){},false[或者true]) IE:attachEvent('事件名[加on]',function(){}); 通过系统方法绑定事件可以让对象可以绑定相同的事件并且执行不同的操作,如果使用第一种方法绑定多个相同的事件,最后一个事件会覆盖前面所有的事件. 在addEventLi

JS中事件绑定的三种方式

以下是搜集的在JS中事件绑定的三种方式. 1. HTML onclick attribute <button type="button" id="upload" onclick="upload_file();"> 原文: http://www.w3school.com.cn/jsref/jsref_events.asp 2. jQuery .on() $(node).on("change", function(e)

JS解决重复绑定问题以及获取事件

1.一些数据交互元素如button 为了避免重复提交信息,可以在$.post或$.get后unbind,在收到返回后再重新绑定:或者将button设置为disabled 2.在ajax可能改变某些参数,同事参数需要在bind时赋值的,在参数变动后需要unbind再重新bind 3.某个元素的click行为是动态绑定的,将会有可能出现重复的绑定,点击一次元素将会触发两次绑定:因此动态绑定的方法需要在绑定时提前解除绑定: 4.使用jQuery的off('click')或者unbind('click'

js基础——事件绑定(事件监听)

JavaScript事件一共有三种监听方法分别如下: 1.事件监听一夹杂在html标签内 1 <div id="box" onClick="alert('HELLO WORLD')"> 2 <div id="box2" onClick="notice();"></div> 3 <div id="box3" onClick="service('HELLO W

JS的事件绑定、事件流模型

.t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.JS事件 (一)JS事件分类 1.鼠标事件:click/dbclick/mouseover/mouseout2.HTML事件: onload/onunload/onsubmit/onresize/onchange/onfoucs/onscroll3.键盘事件: keydown:键盘按下时触发 keypress:键盘按下并抬起的瞬间触发. keyup:键盘抬起触发[注意

js 超浓缩 双向绑定

绑定确实是个有趣的话题. 现在我的绑定器有了不少的功能 1. 附着在Object对象上,一切以对象为中心 2. 与页面元素进行双向绑定 3. 与任意对象绑定,主要是应用在绑定到页面元素的一些属性上,比如style,当然也可以绑定到任意用户自定义的对象上 4. 可以绑定到方法,让对象具有AddEventListener类似的功能,这应该是终极的扩展功能了 5. 支持selector,function,object 的参数写法 6. 默认绑定到value或者innerHTML属性上 Object.p

js中this绑定方式及如何改变this指向

this的绑定方式基本有以下几种: 隐式绑定 显式绑定 new 绑定 window 绑定 箭头函数绑定 隐式绑定 第一个也是最常见的规则称为 隐式绑定. var a = { str: 'hello', sayHi() { console.log(this.str) } } a.sayHi() a 调用sayHi,所以this指向了对象a 我们来看一个类似但稍微高级点的例子. var wrapper = { name: 'user1', sayName() { console.log(this.n