您所在的位置: 首页>>读书频道>>设计开发>>其它开发>>

3.3 当心,这里的bind对我无用

http://book.51cto.com  2008-04-15 16:06  夏天  电子工业出版社博文视点  我要评论(0)
3.3  当心,这里的bind对我无用

我们再次解释bind。bind也叫绑定,它是把一个对象应用于指定的对象,叠加、覆盖对象上下文对象的功能,同时传递一些参数进去,如果这个被应用的对象是function对象,则我们返回这个被应用后的function对象实例,否则我们将改变原有对象并返回这个被应用的对象。如果bind应用于function的时候,允许为以后返回的应用后的function对象设置N个默认参数,而以后对这个新的被应用的function的调用都不需要传递这些参数。
而定义function后,通过prototype的方式定义属性或方法叫做后期绑定。
这时,这个被应用的function对象运行时arguments的情形是:
arguments[0 ~n前面N个参数是bind的时候默认设置的,后面的0 ~ n是调用这个被应用的方法时传递进来的参数]
现在我们定义了一个Object,里面有个属性是function对象,这个function在平常调用的时候,它的this就是这个Object对象,因此在这个function中可以通过“this.Object其他属性或方法”的方式来访问其他属性或方法。那么,我们调用这个function的bind方法,将另外一个对象替换、叠加这个function里的this,也就是“替换”这个Object对象,但是又保留它的原有属性和方法,那我们不是“偷天换日”也把Object给实现bind了?
简单来说,用前面给Function对象增加[]运算符号的原理,即[ ].apply.push能影响this的内容并保留下来,如图3-3所示。
 
图3-3  Object bind图示
其实不然,因此读者可要小心了,以后可千万不要这样想了,请见下面的代码。
    <html>
<head><meta http-equiv=content-type content=“text/html; charset=utf-8”>
<title>当心,这里的bind对我无用</title>
<style>
html,body,td,p,div,span,th
{
font-size:9pt;
}
</style>
</head>
<body>
<script type="text/javascript" language="JavaScript"
src="/jcore/resource /javascript/Jcore.js"></script>
<script type="text/javascript" language="JavaScript">
<!--
var oTestObjectBind = {
name:"情是一种意境",
fnDisplayBind: function()
{
// 原本想在这里输出绑定进来的对象的属性或方法
alert(this.bindValue)
},
fnBindFunc:function()
{
alert([this.bindValue || "bindValue还没有值", this.name || "name还没有值"].join("\n") )
}
};
// 这里只能输出"情是一种意境",因为还没有绑定呢
oTestObjectBind.fnBindFunc();
// 看来绑定只是oTestObjectBind.fnBindFunc的函数临时的一个实例
// 这里却无法访问oTestObjectBind的name
// 当然,我们再call的时候使用oTestObjectBind.name)是完全没问题的
oTestObjectBind.fnBindFunc.call({
bindValue:"欲为诸佛龙象,先做众生马牛。",
fnMyBindFunc:function(){alert(this.name)}
});

// 这里调用会发生错误,因为没有改变原有实例的this
// oTestObjectBind.fnDisplayBind();
// 我们始终得到的是"情是一种意境"
oTestObjectBind.fnBindFunc();
</script>
</body>
</html>
看来,在“第2章2.5节”中为Function描述和设计的bind还是不够完美!那么,如何设计更加完善呢,请看3.4节。
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节
深入Vista应用程序开发
Ruby on Rails 社区网站开发
ASP.NET从入门到精通
Java完全自学宝典
JavaScript完全自学宝典
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有