weixin_42320718
weixin_42320718
2009-07-16 17:33

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

已采纳

[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 iteye_20231 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]
    来完成这个目标

    点赞 评论 复制链接分享
  • iteye_6711 iteye_6711 12年前

    同意楼上几位的意见,特别是achun解释的很详细。
    建议楼主去看下,关于Object和方法的propotype概念会有帮助。

    点赞 评论 复制链接分享
  • wanghaolovezlq wanghaolovezlq 12年前

    Object是js的内置全局对象,

    前后的Object当然都是同一个概念,不会因为你写的位置不同而不一样

    点赞 评论 复制链接分享
  • wanghaolovezlq wanghaolovezlq 12年前

    你的理解是ok的

    点赞 评论 复制链接分享
  • fdsafds fdsafds 12年前

    Object.extend是相当于定义一个静态全局方法

    Object.prototype.extend 表示更改 原来Object.extend 上的方法重新定义.

    prototype详细说明
    [url]http://www.iteye.com/topic/306948[/url]

    点赞 评论 复制链接分享
  • iteye_20589 iteye_20589 12年前

    楼上解释的很通俗..
    一个是:静态全局方法
    一个是:Object的原型对象(也就是Object.prototype)增加一个属性extend,方法.

    楼主看看什么是prototye吧...知道什么是原型...,貌似prototype也算设计模式中的一种吧..

    点赞 评论 复制链接分享
  • wanghaolovezlq wanghaolovezlq 12年前

    什么叫做两种写法是一样的

    Object.prototype.extend 是要依赖于Object.extend的定义

    Object.extend是相当于定义一个静态全局方法,

    Object.prototype.extend这个却是给Object的原型对象(也就是Object.prototype)增加一个属性extend,当然这里定义的是方法,

    你要是去掉Object.extend,那Object.prototype.extend有什么用,
    真正做事的就是Object.extend

    点赞 评论 复制链接分享

相关推荐