Ajax In Action 附录 B3.3

B3.3 从其他对象借函数

把函数放在第一位的状态显著改变了语言的性能,而且,对于这些改变的理解在进行GUI事件处理的时候非常重要,所以大部分Ajax程序员都要理解。

这些新的性能是什么呢?首先,一个对象可以向另一个对象借函数并且调用。我们来定义一个类来演示一个分类系统树的特殊性。

function Tree(name, leaf, bark){

this.name=name;

this.leaf=leaf;

this.bark=bark;

}

然后,添加一个提供树的简单描述的函数:

Tree.prototype.describe=function(){

return this.name+": leaf="+this.leaf+", bark="+this.bark;

}

如果我们现在建立一个树的对象,并且让它进行自我描述,我们就会得到这样的回馈:

var Beech=new Tree("green, serrated edge","smooth");

alert(Beech.describe());

弹出窗口会像这样显示:leaf=green, serrated edge,bark=smooth,就这样,下面来看看定义一个描述小狗的类:

function Dog(name,bark){

this.name=name;

this.bark=bark;

}

为我们的Dog类创建一个实例:

var Snowy=new Dog("snowy","wau! wau!");

Snowy想给我们展示它的叫声,虽然我们已经定义了,但是并没有调用的函数,然而,可以通过Tree类的函数进行:

var tmpFunc=Beech.describe;

tmpFunc.call(Snowy);

记住,function.call()的第一个参数是上下文的对象,也就是this所指的那个对象,这段代码的执行结果将是如下的一个对话框:

 Snowy: leaf=undefined, bark=wau! wau!.

这对这个狗来说,是再好不过的了,那这里再进行什么呢?dog为什么可以调用tree类的函数呢?答案就是这个函数根本就不属于这个tree。即使通过这种引用把函数指定到Tree原型,只是因为他能让我们使用MyTree.describe()的简短写法。其实,函数是被存为一段文本,在我们每次调用的时候取值,这就允许this来区别这些调用。

我们可以在自己的代码里耍借用函数这个小花招,但是在正式的代码中,我们应该来实现一个Snowy自己的bark()方法。我们在这里讨论这个的真正原因是当你在写事件处理代码时,Web浏览器将在后台做一些事情。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值