繁体   English   中英

JavaScript getter和setter

[英]JavaScript getter and 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;
    }
})();

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块的末尾,它尝试根据是否找到附加到该元素(或元素集)的值来返回各种结果。 这样可以保证在遇到“获取”时,“设置”子句不会执行。 如果情况是正在使用“集合”,则它会通过一组稍微复杂的代码来为元素正确设置一个值。

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

这是jQuery val函数的jsfiddle中的确切代码

创建这样的对象的模式很多,每个人都有自己的收藏夹。 Addy Osmani在总结Javascript设计模式“书”中的最流行模式方面做得非常出色。 具体来说,本节:

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

我每半年重读一次,以确保将所有模式保留在颤动中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM