Gly*_*ine 63 javascript oop class
我和朋友上周发了言.他说在JavaScript中没有类这样的东西.
我说你可以说 var object = new Object()
他说"因为没有class用过的词.这不是一个阶级."
谁是对的?
作为一个笔记; 为了将来你需要一个简洁的Classy JS工具:
https://github.com/tnhu/jsface
编辑:2017年7月
ECMAScript 2015中引入的JavaScript类主要是基于JavaScript现有的基于原型的继承的语法糖.类语法没有向JavaScript引入新的面向对象的继承模型.JavaScript类提供了更简单,更清晰的语法来创建对象和处理继承.
- Mozilla ES6课程:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes
Ste*_*son 91
从技术上讲,"JavaScript没有类"的说法是正确的.
虽然JavaScript是面向对象的语言,但它不是基于类的语言 - 它是基于原型的语言.这两种方法之间存在差异,但由于可以像基于类的语言一样使用JavaScript,许多人(包括我自己)通常只是将构造函数称为"类".
wil*_*nka 21
Javascript是一种面向对象的编程语言,尽管如此,2015年ECMA脚本已经引入了6个类,现在使用它们就像其他类基于Java的语言一样正确.当然,正如用户codemagician在他/她的评论中所指出的,在js和java或其他"基于类"的编程语言中,类如何工作之间存在一些深刻的差异.
不过现在在js编程中可以使用例如代码:
class Animal {
constructor(name) {
this.name = name;
}
class Dog extends Animal {
speak() {
console.log(this.name + ' barks.');
}
}
Run Code Online (Sandbox Code Playgroud)
资料来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes
这与经典的基于类的语言有一些共同之处.问题仍然是浏览器支持这项刚刚开始的新技术.因此,在制作产品上使用它仍然不好.但我毫不怀疑这个问题会很快得到解决.
因此,问题仍然存在,因为js已经成为基于类的编程语言,因为这些新特性的实现,或者它仍然是一个面向对象原型的编程语言.
在Javascript中几乎所有东西都是object(对象可以从其他对象继承).它没有classes经典意义上的.
虽然您可以通过函数原型来重现传统类定义/实例化的大部分功能.
请听Douglas Crockford的讲话:http://developer.yahoo.com/yui/theater/video.php? v =
crockonjs-2
他在演讲中直接提出了你的问题:
该语言最具争议的特征是它的继承方式,与几乎所有其他现代语言完全不同.大多数语言使用类 - 我称之为'经典语言' - JavaScript没有.JavaScript是免费的.它使用原型.对于那些接受过经典训练并且看过这种语言的人来说,他们会去:嗯,这是有缺陷的.你没有课,你怎么能完成任何事情?你怎么能相信你的程序结构会起作用?他们永远不会过去.但事实证明......
来自https://github.com/getify/You-Dont-Know-JS的You-Dont-Know-JS书
第 4 章:混合(组合)“类”对象
...
JS 已经有一些类似类的语法元素(例如 new 和 instanceof)已经有一段时间了,最近在 ES6 中添加了一些,例如 class 关键字。
但这是否意味着 JavaScript 实际上有类?简单明了:没有
我不会在这里复制和粘贴其他部分,但鼓励阅读第3 章和第 4 章并运行示例。
https://github.com/getify/You-Dont-Know-JS/blob/1st-ed/this%20%26%20object%20prototypes/ch3.md
https://github.com/getify/You-Dont-Know-JS/blob/1st-ed/this%20%26%20object%20prototypes/ch4.md