JavaScript getter和setter

时间:2013-10-09 15:40:53

标签: javascript getter-setter

这是一个基本的问题,我确定它是重复的,所以我提前道歉,但这就是我如何编写一个对象,我通过这样说:

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

2 个答案:

答案 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返回值的元素类型将是这样的元素作为inputselect等 - 基本上形成元素。

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

我重读了半年,只是为了确保我把所有模式都保留在我的箭袋中。