如果Javascript的本机OOP是无类的,那么构造函数呢?这不意味着一堂课吗?

nop*_*ole 3 javascript oop prototype

我认为Javascript本机OOP系统被认为是无类别的,并且是基于对象的,而不是基于类的.但是我看到的每个例子总是以类似的构造函数开头

function Person(name) {
    this.name = name;
}
Run Code Online (Sandbox Code Playgroud)

只是通过这种方式使用构造函数,这是不是已经意味着正在使用一个类?(一个叫做Person的类)


细节:

如果我们可以使用

a.__proto__ = b;
Run Code Online (Sandbox Code Playgroud)

在任何Javascript平台上,我认为它是无类别的.但我们做不到.如果我们想要这种行为,我们需要使用

function F() { }
F.prototype = b;
a = new F();
Run Code Online (Sandbox Code Playgroud)

因此,构造被使用.因此,如果构造函数是Javascript中的基石,那意味着它应该是Person,Widget等的构造函数,而这些是类.

Alb*_*aro 5

Javascript中的OOP与Java OOP略有不同.Javascript构造函数不引用类定义(因此它是无类别的).相反,构造函数指的是原型.Javascript中OOP的基础是Object对象(不是Object类),从中派生所有其他对象.

原型设计授予您继承权,以及使用属性和方法扩展现有对象的可能性.

我建议你这篇文章.

在你的例子中:

function Person(name) {
    this.name = name;
}

Mike = new Person('Mike');
Run Code Online (Sandbox Code Playgroud)

Person()函数允许您Object使用名为的新属性在对象上创建原型的新对象name.好吧,Javascript oop中的这种函数称为构造函数.