簡體   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