【问题标题】:What's the best way to declare objects? [duplicate]声明对象的最佳方式是什么? [复制]
【发布时间】:2012-07-13 20:19:10
【问题描述】:

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

这个

var Class = function(){};

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

或者这个

var Class_2 = {};

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

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

【问题讨论】:

  • 它们非常不同:期望的结果是什么?
  • 在哪种情况下我应该使用一种方法而不是另一种方法?
  • 您的第一个示例是基于原型的 OO。您的第二个示例只是一个“命名空间”对象。他们没有完成同样的事情。

标签: javascript oop object


【解决方案1】:

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

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

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

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

define classes in JavaScript 有很多方法。但是您应该始终记住,您实际上不是在定义类,而是在定义原型和模拟类。你最好试试learning about prototypes,如果你真的想了解发生了什么,以及如何充分利用它。

【讨论】:

  • 谢谢你,我会留意那些阅读的:)
【解决方案2】:

这取决于你的目的。

第一个可以实例化

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

第二个可以用来利用命名空间

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    相关资源
    最近更新 更多