我正在阅读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"
答案 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');
......他们都有cookSomething
和doDishes
方法。
答案 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();

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