如果我可以随时将任何属性插入对象,那么在javascript中创建类有什么用
What is the use of creating a class in javascript, if I can insert any attritube to an object any time
请考虑以下代码。
我创建了一个空对象。并且正在添加var1,var2,var3
而不声明它们。
var har = new Object();
har.var1 = "Var1";
har.var2 = "Var1";
har.var3 = "Var1";
alert( har.var1 );
如果我能做到这一点,那么当我可以随时引入新属性时,为什么我需要创建一个类并修复属性?
为什么你首先需要使用对象?非面向对象语言已经是图灵完备的,所以你可以用对象完成的所有事情,你也可以不用它们。
您在示例中显示的内容实际上不是一个对象,而只是一个字典。在这种情况下,您只需要将几个相关属性放在一起,像您正在使用的匿名非原型对象是事实上的标准方法(尽管习惯上使用速记语法初始化它们,例如 var har = {}
)。它是一个对象,因为它使用对象数据结构,但它不是面向对象的。
相比之下,实际对象不仅定义数据,还定义可以对该数据执行的操作。对象不仅具有属性,还具有处理这些属性的方法。这些属性通常在对象原型中定义(你称之为"类",但Javascript不是基于类的语言,而是基于原型的语言)。原型中定义的所有方法在该原型的所有实例之间共享。
function Counter() {
this.counter = 0;
}
Counter.prototype.increment = function() {
this.counter++;
alert(this.counter);
}
var c1 = new Counter();
var c2 = new Counter();
c1.increment(); // alerts 1
c1.increment(); // alerts 2
c2.increment(); // independent from c1: alerts 1 again
每个实例仍然是一个字典,就像在你的例子中一样(你甚至可以向它们添加更多属性,它们不是通过拥有构造函数和原型来"固定"的),但现在它也可以对其属性执行任务。这也可以按照您的方式完成:
c1 = {
counter: 0,
increment: function() {
this.counter++;
alert(this.counter);
}
}
c2 = {
counter: 0,
increment: function() {
this.counter++;
alert(this.counter);
}
}
但是,您可以看到,如果您需要两个计数器,而不使用原型,则需要复制整个对象定义。这将很麻烦编写和维护,并且每个increment
函数都将单独定义,因此也会浪费内存。
也就是说,如果你需要一个你知道你只需要一个实例的对象,那么定义一个构造函数和一个原型是没有意义的。此类对象通常被视为命名空间,而不是实际对象。
附录:字典与对象
字典是保存命名元素的数据结构。除了"字典",它们也被称为关联数组或哈希图。Javascript 中的对象是作为字典实现的——每个属性都是字典中的一个命名元素。除了普通字典之外,对象还有一个原型,它有点像父对象 - 当你在字典中查找一个命名元素而它不存在时,它也会自动在原型中搜索。这样,默认属性和方法在原型中仅定义一次,不需要复制到每个实例中。(对象的原型通常显示为 instance.__proto__
属性,尽管这是非标准的,即使在支持它的浏览器中也已弃用;实际原型被标准定义为内部的、不可访问的属性)
因此,Javascript对象实际上是字典。当你想使用普通字典将一些相关属性存储在一起时,Javascript 中没有单独的语法来创建不是对象的字典,所以你创建一个基Object
类型的实例来保存你的字典(不管你做var dict = new Object
还是var dict = {}
, 结果是一样的);因此,在代码中使用的字典也是对象。
- 从javascript创建一个列表
- 使用Javascript创建测验页面
- 获取对使用Tampermonkey使用javascript创建的元素的引用
- Jquerymobile-使用javascript创建选择菜单
- 使用SVG和JavaScript创建波浪动画
- 用javascript创建一个看起来正常分布的模式
- 如何在Ol3弹出窗口中添加用javascript创建的按钮上的点击事件
- 在PHP邮件中发送javascript创建的内容
- Knockout绑定是膨胀的html(表单元格),如何使用javascript创建绑定或从父元素绑定
- 重置使用javascript创建的新tr的val
- 如何使用javascript创建颜色数组
- javascript创建日期的月份错误
- 如何使用JavaScript创建时间计数器
- 使用Javascript创建内部样式表
- 用javascript创建另一个对象的实例
- 如何使用HTML、CSS和JavaScript创建自动图片库幻灯片
- 使用Javascript创建的Cookie在C#代码中不可访问..任何原因或其他选择
- 用javascript创建对象的dynamic数组
- Javascript创建函数,以便在其他函数之间共享变量
- 使用javascript创建幻灯片效果