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

[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面对对象这方面研究.

首先这两种写法是不同的,前面几位已经有阐述
我要说的是在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]
来完成这个目标

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

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

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

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

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

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

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

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

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

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

你的理解是ok的

Object是js的内置全局对象,

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

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