这是一个基本的问题,我确定它是重复的,所以我提前道歉,但这就是我如何编写一个对象,我通过这样说:
myApplication.myFirstMethod(x);
x = myApplication.myFirstMethod();
以下是代码:
myApplication = {};
(function() {
myApplication.myFirstMethod = function() {
var local = {};
if (arguments.length) {
local.result = arguments[0];
}
return local.result;
}
myApplication.mySecondMethod = function() {
var local = {};
if (arguments.length) {
local.result = arguments[0];
}
return local.result;
}
})();
答案 0 :(得分:3)
的 jsFiddle Demo
强> 的
更面向对象的方法是使用实例化和原型。
设置
var Application = function(){
this.local = {};
};
Application.prototype.Value = function(){
if (arguments.length) {
this.local.result = arguments[0];
}else{
return this.local.result;
}
};
用于
var app = new Application();
app.Value(6);
alert(app.Value());//6
从jQuery的角度来看,他们会先查看是否有参数,这段代码直接来自val
函数的来源:
val: function( value ) {
if ( !arguments.length ) {
var elem = this[0];
...
然后继续使用元素的本机API和其他一些指标来获取元素的值(通常,唯一会从val
返回值的元素类型将是这样的元素作为input
,select
等 - 基本上形成元素。
在if
块的末尾,它会尝试根据是否找到附加到元素(或元素集)的值来返回各种结果。这保证了当遇到“get”时,“setting”的子句永远不会执行。如果情况是使用“set”,则会通过一组稍微复杂的代码来正确设置元素的值。
代码显示val: function()
的原因是因为它是一个对象的一部分,用于使用jQuery的extend
功能“扩展”jQuery原型。
This is the exact code in a jsfiddle of jQuery's val
function
答案 1 :(得分:3)
创建像这样的对象有很多模式,每个人都有他们的最爱。 Addy Osmani在他的Javascript设计模式“书”中总结了最流行的模式。具体来说,这一节:
http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript
我重读了半年,只是为了确保我把所有模式都保留在我的箭袋中。