何时使用此而不是javascript中的对象文字?

时间:2016-07-30 02:40:01

标签: javascript jquery oop

我正在阅读JS中的OOP,但传统的OOP与对象文字之间存在混淆。我还在github中发现许多优秀的JS项目都没有写成'OOP方式'。他们利用对象的leteral模式,如揭示模式和单身。我来自Java,现在我在以下模式之间使用它们,何时使用它们。

OOP:

function cook(){
this.vege = 'something';
}

var Cook = new cook();
console.log(Cook.vege = 'something else')

对象文字方式:

var cook = {

vege:"something"

}
cook.vege = "something else"

2 个答案:

答案 0 :(得分:1)

通常,您只需要一个对象文字。但是,如果您想要使用相同的模式创建多个对象实例,则应使用构造函数来避免重复自己。如果您想跨实例共享事物,例如方法,这也很重要:

function Cook(name) {
  this.name = name;
  this.vege = 'something';
}

Cook.prototype = {
  cookSomething: function () { ... },
  doDishes: function () { ... }
};

现在你可以做到:

var fred = new Cook('Fred');
var lisa = new Cook('Lisa');

......他们都有cookSomethingdoDishes方法。

答案 1 :(得分:0)

让我们说,为特定学生创建了100个对象:



var Student = function (name) {
  this.name = name;
  this.greet = function () {
    console.log("My name is " + this.name);
  };
};

var praveen = new Student("Praveen Kumar");
var hello = new Student("Hello, World!");
var jeff = new Student("Jeff Atwood");

praveen.greet();
hello.greet();
jeff.greet();




但是,如果我突然想要将greet()函数添加到另一个函数:

console.log("Hola! This is " + this.name);

现在的"班级"派上用场。



var Student = function (name) {
  this.name = name;
  this.greet = function () {
    console.log("My name is " + this.name);
  };
};

var praveen = new Student("Praveen Kumar");
var hello = new Student("Hello, World!");
var jeff = new Student("Jeff Atwood");

Student.prototype.sayHola = function () {
  console.log("Hola! This is " + this.name);
};

praveen.sayHola();
hello.sayHola();
jeff.sayHola();




在一个原型中添加比添加所有对象更容易。这会将功能添加到所有对象中。