我假设ES6类是一个对象,因为“一切”是JavaScript中的对象。这是正确的假设吗?
答案 0 :(得分:4)
从Object Oriented Programming
类的角度来看,不是 对象。它是抽象。而且每个对象都是抽象的具体实例。
从JavaScript的角度来看, class 是对象,因为 class 是 ES6 功能在它下面使用简单的功能。它不仅仅是Javascript中的抽象,而且还是一个对象。而这个功能是一个对象。它拥有自己的属性和功能。
所以在Javascript中说不是一切都是对象。还有来自number
的原始类型 - string
,boolean
,undefined
,symbol
,ES6
。当您使用除undefined
之外的这些原始类型的某些方法时,它们将被转换为对象。
您可以看到以下示例。
const str = 'Text';
const strObj = new String('Text');
console.log(str);
console.log(strObj.toString());
console.log(typeof str);
console.log(typeof strObj);

还有一个额外的基本类型null
,但检查它的类型会返回对象。这是一个错误。
console.log(typeof null);

答案 1 :(得分:3)
ES6类是一个函数:
(class {}) instanceof Function === true
任何函数都是一个对象:
(class {}) instanceof Object === true
答案 2 :(得分:2)
是的,是的。
如果你这样做:
class Hello { };
然后Hello
本身就是一个可以像其他任何一样使用的对象:
console.log(Hello.toString()); // outputs 'class Hello { }'
正如您所说,JavaScript中的 eveything 是一个对象
事实上:
console.log(Hello instanceof Object); // prints 'true'
答案 3 :(得分:1)
真正的问题是Javascript类是否是类!
实际上他们不是。 Javascript的对象模型是基于原型的,而不是基于类的,这使得它很难理解。 class
语法是一个有用的工具,但实际上只有语法糖才能使模型更容易理解。
实际上,JS类实际上是一个函数,其原型与之相关。
class Hippo{};
Hippo.__proto__ === Function.prototype; // true
所有JS函数都是对象。
Hippo.__proto__.__proto__ === Object.prototype; // true
更漂亮的说法是
Hippo instanceof Object; // true
所以JS类是一个对象和一个函数 - 但它实际上不是一个类!
答案 4 :(得分:0)
Class是Javascript中的一个函数,只有函数有原型属性,而不是对象。
检查以下代码
class MyClass {}
MyClass.prototype.value = 'My Class Value'; // Works same as function
const myclass = new MyClass();
console.log(myclass.value);
function MyFunc() {}
MyFunc.prototype.value = 'My Function Value';
const myfunc = new MyFunc();
console.log(myfunc.value);
var MyObject = {};
MyObject.prototype.value = 10; // Throws an error