Javascript - 创建对象的推荐方法

时间:2015-02-11 05:27:26

标签: javascript

看起来有很多方法可以在Javascript中创建对象:

var person = {
    firstName:"John",
    lastName:"Doe",
    age:50,
    eyeColor:"blue"
};

function person(){
    this.firstName = 'first';
    this.lastName = 'last';
    this.age = 'age';
    this.eyeColor = 'eyecolor';
}

person = (function () {
    this.firstName = 'first';
        this.lastName = 'last';
        this.age = 'age';
        this.eyeColor = 'eyecolor';
}();

有人可以帮我理解上面哪一项是最佳使用方法吗?

还有什么场景我们使用自调用函数?

2 个答案:

答案 0 :(得分:2)

如果你想获得最大收益,你可以使用一个功能,它允许你设置"公共"和#34;私人"变量。例如:

function Person (name, age) {
    var number = (Math.random() * 100) | 0;
    // number is private; there's no way to access it outside
    // of the scope of this function
    var surpriseParty = new Date(Date.now() + number*24*3600*1000);
    // we're throwing you a party within the next 100 days
    this.name = name;    // public
    this.age = age;      // public
    return {
        getName: function () { return name },
        getAge: function () { return name },
        getPartyDate: function () { return surpriseParty }
    }
}

如上面代码所述,现在只能访问某些变量:

var p = new Person("royhowie", 18);
// p.getName() => "royhowie"
// p.name => "royhowie"
// p.getAge() => 18
// p.age => 18
// p.number => undefined
// p.surpriseParty => undefined
// p.getPartyDate() => date within the next 100 days

事实上,你应该使用最合适的法案。上面的方法是一种封装数据的简单方法,但如果您希望所有内容都是公共的,请使用普通对象语法:

var p = { name: "royhowie", age: 18, surpriseParty: new Date() };

我不推荐使用自动执行的匿名函数语法。您应该在其他地方声明该函数(至少用于调试);这至少可以让您选择创建该对象的两个不同实例。

答案 1 :(得分:0)

这个问题已经回答here,它正确地指出没有推荐的创建JavaScript对象的方法。这完全取决于您的使用案例。

根据W3schools,有一种创建对象的标准方法:

创建"对象类型的标准方法"是使用对象构造函数。这是一个例子:

function person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
}
var myFather = new person("John", "Doe", 50, "blue");
var myMother = new person("Sally", "Rally", 48, "green");

希望这有帮助! :)