我正在学习 Treehouse 的“ES2015 简介”类(class),老师展示了这段代码来说明箭头函数,但在这里他将该函数实例化为一个类。谁能告诉我这怎么可能?
我对对象的了解是,您需要在实例化它之前创建一个类或创建一个文字对象,但本例并非如此。
'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 已经有一个很棒的功能来实现这一点:原型(prototype)继承。对象可以继承其他对象,包括方法:
const proto = { method() { /*...*/ } };
const instance = Object.create(proto);
instance.method(); // that works, as instance inherits proto
现在我们只需要构造函数,因为我们可以在使用上面的方法创建对象后调用一个函数:
constructInstance(Object.create(proto));
现在,由于这是一项非常常见的任务(因为 JS 从一开始就具有原型(prototype)继承),因此添加了 new
运算符,它基本上完成了所有这些工作:
1) 它创建一个继承自所调用函数的 .prototype
的空对象。
2) 它以 this
为对象来调用函数本身。
3)它返回该对象。
function Person(name) {
this.name = name;
}
Person.prototype.method = function() { /*...*/ };
new Person("Jonas").method();
就这样,继承和构造函数没有任何类
es。
现在,由于这仍然不太漂亮,所以添加了 class
语法,它基本上只是创建一个带有原型(prototype)的函数。
关于javascript - 为什么 JavaScript 中函数被视为类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55925090/