为什么函数在JavaScript中被视为类
我正在学习Treehouse的“介绍ES2015”课程,老师展示了这段代码来说明箭头函数,但在这里他将函数实例化为一个类。谁能告诉我怎么可能 我对对象的了解是,在实例化类或创建文本对象之前,需要先创建一个类,但实际情况并非如此为什么函数在JavaScript中被视为类,javascript,ecmascript-6,arrow-functions,Javascript,Ecmascript 6,Arrow Functions,我正在学习Treehouse的“介绍ES2015”课程,老师展示了这段代码来说明箭头函数,但在这里他将函数实例化为一个类。谁能告诉我怎么可能 我对对象的了解是,在实例化类或创建文本对象之前,需要先创建一个类,但实际情况并非如此 'use strict'; var Person = function(data) { for (var key in data) { this[key] = data[key]; } this.getKeys = () =>
'use strict';
var Person = function(data) {
for (var key in data) {
this[key] = data[key];
}
this.getKeys = () => {
return Object.keys(this);
}
}
var Alena = new Person({ name: 'Alena', role: 'Teacher' });
console.log('Alena\s Keys: ', Alena.getKeys()); // 'this' refers to 'Alena'
var getKeys = Alena.getKeys;
console.log(getKeys());
一切正常,但我不知道为什么。你应该问自己一个问题:什么是
类
实际上,它只是一种语法,用于组合以下内容:
1) 一个构造函数
。这是一种函数,用于构造类的实例
2) 方法。可以在实例上调用它们
现在来看第二个,JS已经有了一个很好的特性来实现这一点:原型继承。对象可以继承其他对象,包括方法:
const proto = { method() { /*...*/ } };
const instance = Object.create(proto);
instance.method(); // that works, as instance inherits proto
现在我们只需要构造函数,因此我们可以在使用上述方法创建对象后调用函数:
constructInstance(Object.create(proto));
现在,由于这是一项非常常见的任务(因为JS从一开始就具有原型继承),因此添加了new
操作符,它基本上完成了所有这些:
1) 它创建一个空对象,该对象继承于调用的函数的.prototype
2) 它以this
为对象调用函数本身
3) 它返回那个物体
function Person(name) {
this.name = name;
}
Person.prototype.method = function() { /*...*/ };
new Person("Jonas").method();
接下来就是继承和构造函数,没有任何类
现在,这还不是很漂亮,添加了类
语法,基本上只是创建了一个带有原型的函数。如果我说类
只是创建了一个函数。。。那我就更让你困惑了,对吧您可能需要阅读一篇全面的解释,了解jsp中真正的函数是什么,以及@jonaswillms所说的是什么,它的Class
在javascript中并不存在。ES中的class Person{}
将是你老师写的:)我没有资格给出正确的答案,但它基本上是JavaScript实现面向对象编程的组合(它是基于原型的语言,而不是基于类的语言),函数是JavaScript中的对象这一事实以及创建该语言的人的语法选择。IMHO不是学习OOP最直观的语言。