我在想——JavaScript 对象、类和函数之间有什么区别?我认为类和函数是对象的类型是否正确?
类与函数的区别是什么?或者它们真的是同一件事,只是它们的术语根据它们的使用方式而改变?
function func() { alert('foo'); } // a function
func(); // call the function - alerts 'foo'
var func2 = function () { alert('hello'); } // acts the same way as 'func' surely?
func2(); // alerts 'hello'
var Class = function() { alert('bar'); }; // a class
var c = new Class(); // an istance of a class - alerts 'bar'
当然,类有方法和属性并且可以被实例化——但是,我可以对任何旧函数做同样的事情——或者不?
原文由 Sean Bone 发布,翻译遵循 CC BY-SA 4.0 许可协议
您现在一定已经知道,JavaScript 中没有类。相反,可以通过在函数调用前加上
new
关键字,使 JavaScript 中的函数表现得像构造函数。这被称为 构造函数模式。在 JavaScript 中,除了原始数据类型(布尔值、数字和字符串)和
undefined
之外,一切都是对象。另一方面null
实际上是一个对象引用,尽管您一开始可能不这么认为。这就是typeof null
返回"object"
的原因。JavaScript 中的函数类似于 Lua 中的函数表(即它们是可调用对象)。因此可以使用函数代替对象。同样,数组也是 JavaScript 中的对象。另一方面,对象可以被认为是关联数组。
然而,最重要的一点是 JavaScript 中没有类,因为 JavaScript 是一种原型面向对象的语言。这意味着 JavaScript 中的对象直接继承自其他对象。因此我们不需要课程。我们所需要的只是一种创建和扩展对象的方法。
阅读以下主题以了解有关 JavaScript 中原型继承的更多信息: 原型继承相对于经典继承的优势?