对象与类与函数

新手上路,请多包涵

我在想——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 许可协议

阅读 192
2 个回答

您现在一定已经知道,JavaScript 中没有类。相反,可以通过在函数调用前加上 new 关键字,使 JavaScript 中的函数表现得像构造函数。这被称为 构造函数模式

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

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

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

阅读以下主题以了解有关 JavaScript 中原型继承的更多信息: 原型继承相对于经典继承的优势?

原文由 Aadit M Shah 发布,翻译遵循 CC BY-SA 4.0 许可协议

2015 年更新

JavaScript 中有一些类,它们只是不在旧浏览器上使用:

兼容性截图

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

它具有构造函数、扩展等。

 class Cat {
  constructor(name) {
    this.name = name;
  }

  speak() {
    console.log(this.name + ' makes a noise.');
  }
}

class Lion extends Cat {
  speak() {
    super.speak();
    console.log(this.name + ' roars.');
  }
}

原文由 Roger 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题