簡體   English   中英

如何以對象字面量表示法創建方法?

[英]How to create a method in object literal notation?

我了解到有兩種類型的創建對象。 第一個:對象文字表示法,第二個:對象構造函數。 我了解到也有方法和函數,但我不明白如何用對象文字表示法創建方法? 在對象構造函數中,我只寫:

var bob = new Object();
bob.age = 30;
bob.setAge = function(newAge) {
  bob.age = newAge;
};

你能告訴我在編寫對象文字符號時如何做同樣的事情嗎?

var bob = {
  age: 30
};

從語法上講,更改非常簡單:

var bob = {
  age: 30,
  setAge: function (newAge) {
    bob.age = newAge;
  }
};

但是正如您所看到的,有一個問題:在您的代碼中,它使用外部bob變量,因此如果您更改bob變量的值,這將不起作用。

你可以用

var bob = {
  age: 30,
  setAge: function (newAge) {
    this.age = newAge;
  }
};

請注意,此時您應該檢查您需要的是否實際上不是class ,如果您有多個實例,這會帶來一些性能改進。

更新: ECMAScript 6 現在允許以相同的方式定義方法,無論它們是否在對象字面量中:

var bob = {
  age: 30,
  setAge (newAge) {
    this.age = newAge;
  }
};

它沒有什么不同,就像

var bob = {
    age:     30,
    setAge:  function( newAge ) {
        this.age = newAge;
    }
};

或者,您可以通過調用Object.defineProperty()或簡單地創建一個真正的setter函數

var bob = {
    age:       30,
    firstName: 'j',
    lastName:  'Andy',
    set setName( newName ) {
        var spl = newName.split( /\s+/ );
        this.firstName = spl[ 0 ];
        this.lastName  = spl[ 1 ];
    }
}

你可以去哪里

bob.setName = "Thomas Cook";  // which sets firstName to "Thomas" and lastName to "Cook"

您發布的最后一個代碼缺少逗號。 此外,您不需要';' 在對象屬性的函數定義之后。 像這樣:

var object2 = {
name: "Fred",
age: 28,
club: "Fluminense",
bio2: function (){
    console.log(this.name +" is "+ this.age + " years old and he is playing in "+             this.club);
    }
};

這是使用文字對象創建方法解決此練習的方法:

var setAge = function (newAge) {
  this.age = newAge;
};

var bob = new Object();
bob.age = 30;
bob.setAge = setAge;

var susan = {
    age: 25,
    setAge: setAge
}

susan.setAge(35);

如果要封裝,可以使用以下語法(自執行函數)。 這里的年齡不能從對象鮑勃的外部訪問。

var bob = (function() {
    //...private
    var age = 30;

    function setAge(newAge) {
        age = newAge;
    };

    function getAge() {
            return age;
        }
    // Public api
    return {
        setAge: setAge,
        getAge: getAge
    }
}());
bob.setAge(50);
alert(bob.getAge());

jsfiddle: http : //jsfiddle.net/61o9k98h/1/

從 ECMAScript 2015 開始,引入了更短的對象初始值設定項的方法定義語法。 它是分配給方法名稱的函數的簡寫


const bob = {
    age: 30,
    setAge(age) {
        this.age = age;
    },
};
alert(bob.age); // 30
bob.setAge(63); // set age = 63
alert(bob.age); // 63

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions

像這樣:

var bob = {
    age: 30,
    setAge: function (age) {
        this.age = age;
    }
}
alert(bob.age); // 30
bob.setAge(45); // set age = 45
alert(bob.age); // 45

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM