weixin_42320718 2009-07-16 17:33
浏览 176
已采纳

请教这两种写法为什么不同?

[code="java"]Object.extend = function(destination, source) {
for (property in source) {
destination[property] = source[property];
}
return destination;
}

Object.prototype.extend = function(object) {
return Object.extend.apply(this, [this, object]);
} [/code]

这是从prototype里面copy出来.给我个人感觉这两种写法不是一样的吗?

上面书上也做过解释,但没有看明白,总给我感觉这两种写法是一样的. :cry:

请求谁能解释一下,希望越通俗越好.谢谢了.
[b]问题补充:[/b]
看了各位的解释,似乎有些明白.

是否可以这样解释.
[code="java"]Object.extend[/code]
在Object中扩展一个静态全局方法,叫extend.实现了继承的功能.

[code="java"]Object.prototype.extend = function(object) {

return Object.extend.apply(this, [this, object]);

} [/code]

这句中用apply方法调用了上面的继承方法.起到的只是一种补充的作用.
是一种对prototype的属性进行重写.

就像
[url]http://www.iteye.com/topic/306948[/url]中最后一段所说的.

[b]问题补充:[/b]
从代码的用途上我是理解了,但主要是
[code="java"]Object.extend [/code]
这种用法Object只能是实例后的对象才会这样写.

[code="java"]Object.prototype.extend [/code]
而这种写法是对原构造函数的定义的一种扩展,或是一种改写.

前者是针对实例化对象的,后都是针对原型的.

那前后的Object是一个概念吗?

由于小弟这几天才看的JS.以前一直是写些简单的东西.没有真正的对JS面对对象这方面研究.

  • 写回答

7条回答 默认 最新

  • iteye_20231 2009-07-17 06:12
    关注

    首先这两种写法是不同的,前面几位已经有阐述
    我要说的是在prototype里为什么要这样写
    prototype 想要设计一个 让所有Object对象都拥有 extend 方法.
    那当然是要从 Object.prototype 这种原型定义下手,所以就有了
    [code="js"]
    Object.prototype.extend = ...
    [/code]
    这样的写法
    问题是Object本身也是一个对象,这样定义后新的对象
    [code="js"]
    obj= new Object();
    [/code]
    obj具有了 extend 方法,可是Object这个对象本身却没有 extend 方法,作者当然出于严谨做学问的态度,所以就有了
    [code="js"]
    Object.extend= ...
    [/code]
    这个定义
    很明显目的中Object.extend 和Object.prototype.extend应该具有相同的功能所以,作者巧妙的用
    [code="js"]
    Object.prototype.extend = function(object) {

    return Object.extend.apply(this, [this, object]);

    }
    [/code]
    来完成这个目标

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出
  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件
  • ¥15 visual studio2022中文乱码无法解决