如何用对象文字表示法创建方法?

时间:2013-07-05 10:36:12

标签: javascript

我已经在Codeacademy.com开始了仅仅13天的网络编程,并且发现它是一个学习的好地方。但我有时还会误解事情。我总是在w3school.com上查看它们,但这次我找不到我需要的信息。因此,据我所知,首先有两种类型的创建对象:对象文字符号和第二种:对象构造函数。我已经了解到还有方法和函数,但我无法理解如何用对象文字表示法创建方法?在对象构造函数中,我只写:`

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

在编写对象文字表示法时,能告诉我如何做同样的事。

var bob = {
age: 30
};

7 个答案:

答案 0 :(得分:38)

从语法上讲,变化非常简单:

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

但正如您所看到的,存在一个问题:在您的代码中,它使用外部bob变量,因此如果您更改bob变量的值,这将无效。

您可以使用

解决此问题
var bob = {
  age: 30,
  setAge: function (newAge) {
    this.age = newAge;
  }
};

请注意,此时您应该检查您所需要的内容实际上是a class,如果您有多个实例,这会带来一些性能改进。

更新: ECMAScript 6现在允许以相同的方式定义方法,无论它们是否在对象文字中:

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

答案 1 :(得分:4)

它与

没什么不同
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"

答案 2 :(得分:2)

您发布的最后一个代码缺少逗号。另外,你不需要';'在对象属性的函数定义之后。像这样:

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

答案 3 :(得分:1)

这是使用文字对象创建方法解决此练习的方法:

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

答案 4 :(得分:0)

像这样:

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

答案 5 :(得分:0)

如果要封装,可以使用以下语法(自执行功能)。这里的年龄不能从物体外部进入。

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/

答案 6 :(得分:0)

从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