1

在javascript中声明对象的最佳方式是什么?

这个

var Class = function(){};

Class.prototype.print = function(){
    console.log('hello world');
};

或者这个

var Class_2 = {};

Class_2.print = function(){
    console.log('hello world');
};

在这种情况下,我应该使用一种方法而不是另一种方法?

4

2 回答 2

4

这取决于您是要创建一个类还是单个对象。

JavaScript OOP 模型基于原型,而不是类。这就是为什么您不仅可以将属性和方法添加到类(意味着该类的所有“实例”都将具有该属性或方法),还可以添加到特定对象。因此,您可以拥有类 C 的对象 A 和 B 实例,并且您可以向 A 添加只有 A 具有而 B 没有的特殊行为……这一切听起来很奇怪,因为 JavaScript 实际上没有类。它只有原型,您可以或多或少地使用原型可以做的事情来“模拟”类。在 JavaScript 中,当对象 A 是另一个对象 B 的“实例”时,您实际上是在说 B 是 A 的原型。这意味着您将根据 A 与 B 的差异来定义 A。

在现实世界中,这意味着您与绵羊的第一次相遇是与多莉,一只又大又白、多毛的绵羊。所以你说 Dolly.color = white; Dolly.hair = a_lot; Dolly.size = 大;然后有人问你羊的颜色是什么,因为你只认识多莉,你认为所有的羊都和多莉一模一样,你回答是白色的……然后你遇到了另一只羊,皮特,但这只羊又黑又大,而且哈里。所以你说 Pete 和 Dolly 完全一样,除了 Pete 是黑色的......所以你会说 Pete.Prototype = Dolly (这意味着它和 dolly 完全一样),但是你会覆盖颜色并说不一样:Pete.color = black;

要在 JavaScript 中“模拟”类,您要做的是定义一个名为 Sheep 的“理想”绵羊,它拥有所有绵羊的所有“默认”品质,并将其用作所有其他绵羊的原型。

在 JavaScript中有很多方法可以定义类。但是您应该始终记住,您实际上不是在定义类,而是在定义原型和模拟类。如果您真的想了解正在发生的事情以及如何充分利用它,您最好尝试学习原型。

于 2012-07-13T23:56:04.793 回答
1

这取决于你的目的是什么。

第一个可以实例化

var obj = new Class('...');

第二个可用于利用命名空间

于 2012-07-13T23:42:32.690 回答