声明对象的最佳方法是什么?

时间:2012-07-13 23:40:07

标签: javascript oop object

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

这一个

var Class = function(){};

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

或者这个

var Class_2 = {};

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

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

2 个答案:

答案 0 :(得分:4)

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

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 = big;然后有人问你羊的颜色是什么,因为你只知道多莉,你认为所有的羊都像小车一样,你回答白色...然后你遇到了另一只羊,皮特,但这个是黑色和大的HARY。所以你说Pete和Dolly完全一样,只不过Pete是黑色的.... 所以你会说Pete.Prototype = Dolly(这意味着它就像多莉一样),但是你会覆盖颜色并说它不同:Pete.color = black;

要在JavaScript中“模拟”类,你所做的就是定义一只名为“绵羊”的“理想”绵羊,它具有所有绵羊的所有“默认”特性,并将其用作所有其他绵羊的原型。

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

答案 1 :(得分:1)

这取决于你的目的。

第一个可以实例化

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

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