作为一名C#/.NET开发人员,我喜欢在业余时间玩弄JavaScript——创建自己的库/框架等。诚然,它们并不多(实际上只是一些松散的函数集合),但目的是为了学习,而不是供他人使用。
通常我会通过以下方式扩展基本的JavaScript对象:
这使我能够创建其他对象并链接方法,非常流畅:
两个例子:jQuery Knock-off,List-Item Sorter 然而,最近我看到比我自己写的代码更加函数化的对象以这种方式实现相同的功能:
通常我会通过以下方式扩展基本的JavaScript对象:
obj = function () {
//basic object stuff
this.method = function () {
//other stuff
};
return this;
};
这使我能够创建其他对象并链接方法,非常流畅:
obj('arg1').method();
两个例子:jQuery Knock-off,List-Item Sorter 然而,最近我看到比我自己写的代码更加函数化的对象以这种方式实现相同的功能:
function obj(){
//stuff
}
obj.prototype.method = function () {
//stuff
};
这两种方法似乎都能实现同样的目标,我对这两种语法的外观都没有偏见。有没有特定的情况下其中一种更有用?这些方法提供了什么让它们比另一种更具吸引力的功能?
编辑
考虑以下代码:
var dice = function (sides) {
this.roll(){
return 4 //guaranteed to be random
}
};
var d1 = dice(6);
d1.roll() // 4;
var d2 = dice(20);
d2.roll() // 4
d1 和 d2 是不是不同的对象,就像它们对我所显示的那样?或者它们只是指向一个对象(变量 dice)的指针/别名?
window
对象上创建了method
,然后返回了全局对象。(除非你省略了一些改变其含义的关键代码)。你的dice
例子根本不起作用,因为语法无效,并且修复语法后,d1
和d2
将会是undefined
。 - user113716