2

This is such a fundamental question, that I'm sure it's a duplicate, so I apologize in advance, but is this how I write an object such that I use by saying:

myApplication.myFirstMethod(x);
x = myApplication.myFirstMethod();

Here's the code:

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;
    }
})();
4

2 回答 2

3

创建这样的对象有很多模式,每个人都有自己的最爱。Addy Osmani 出色地总结了他的 Javascript 设计模式“书”中最流行的模式。具体来说,本节:

http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript

我每半年重读一次,只是为了确保我把所有的模式都保存在我的箭袋里。

于 2013-10-09T15:53:32.140 回答
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块的末尾,它会尝试根据是否找到附加到元素(或元素集)的值来返回各种结果。这保证了“设置”子句在遇到“获取”时永远不会执行。如果情况是使用了“set”,它会通过一组稍微复杂的代码来正确地为元素设置一个值。

代码显示的原因val: function()是因为它是一个对象的一部分,该对象用于使用 jQuery 的extend功能“扩展”jQuery 原型。

这是 jQueryval函数的 jsfiddle 中的确切代码

于 2013-10-09T15:49:12.067 回答