javascript - 对象与类与函数

标签 javascript class oop

我想知道 - 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'

当然,类有方法和属性并且可以被实例化 - 但是,我可以对任何旧函数做同样的事情 - 或者不能?

最佳答案

你现在肯定已经知道 JavaScript 中没有类。 JavaScript 中的函数可以通过在函数调用前加上 new 来表现得像构造函数> 关键字。这被称为 constructor pattern .

在 JavaScript 中,除了原始数据类型( bool 值、数字和字符串)和 undefined 之外,一切都是对象。另一方面,null 实际上是一个对象引用,即使您一开始可能不这么认为。这就是 typeof null 返回 "object" 的原因。

JavaScript 中的函数类似于 Lua 中的函数表(即它们是可调用对象)。因此可以使用函数代替对象。同样,数组也是 JavaScript 中的对象。另一方面,对象可以被认为是关联数组。

然而,最重要的一点是 JavaScript 中没有类,因为 JavaScript 是一种原型(prototype)面向对象的语言。这意味着 JavaScript 中的对象直接继承自其他对象。因此我们不需要类(class)。我们所需要的只是一种创建和扩展对象的方法。

阅读以下主题以了解有关 JavaScript 中原型(prototype)继承的更多信息:Benefits of prototypal inheritance over classical?

关于javascript - 对象与类与函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17525450/

相关文章:

C++ session 管理方法

javascript - 理解 Javascript 中的 try..catch

javascript - 将旋转从 360 度重置为 0 度时如何避免逆时针旋转动画?

javascript - 当运行 WebMatrix 的站点访问时,是否有任何 protected 文件类型会返回 404?

javascript - 使用 YUI 解析 JSON,数据包中的 {} 周围带有 []

c++ - 确定指向抽象类的指针设置为哪个派生类

JavaScript: 'typeof' 运算符未返回正确的类类型

java - toString 方法显示错误

java - 传递 TimeUnits 并转换为毫秒

Python类变量更新