JavaScript的规范术语;“类”;

JavaScript的规范术语;“类”;,javascript,Javascript,下面是一个在JavaScript中定义“类”、创建其实例并调用其中一个方法/函数的简单示例 // Define a class like this function Person(name, gender){ // Add object properties like this this.name = name; this.gender = gender; } // Add methods like this. All Person objects will be abl

下面是一个在JavaScript中定义“类”、创建其实例并调用其中一个方法/函数的简单示例

// Define a class like this
function Person(name, gender){

   // Add object properties like this
   this.name = name;
   this.gender = gender;
}

// Add methods like this.  All Person objects will be able to invoke this
Person.prototype.speak = function(){
    alert("Howdy, my name is" + this.name);
};

// Instantiate new objects with 'new'
var person = new Person("Bob", "M");

// Invoke methods like this
person.speak();
在开场白中使用引号的原因是,上面的内容根本不是一个类,因为JavaScript没有类。那么,用什么词来描述上述情况最好呢


我知道
Person
是构造函数,而
speak
是一个方法,但构造函数及其方法的整体的规范术语是什么。显然,在爪哇、C++、C等中,它被称为类,但我不确定JavaScript中等价的术语是什么?

< P>强>构造函数是一种典型的引用< /P>的方式。 然而,你可以称之为一门课,我非常怀疑在实际或工作环境中会有人与你争论。在概念上,它本质上仍然是一个类,即使Javascript没有实现它——任何看到该代码的人都会理解,您是基于类定义创建对象的

实现方式明显不同,但意图(非常接近)相同,使用相同的名称是相当公平的。如果没有其他原因,也不太可能引起混乱


我不保证是否有人会在研究或学术环境中与你争论……

构造函数将是一种典型的引用方法

然而,你可以称之为一门课,我非常怀疑在实际或工作环境中会有人与你争论。在概念上,它本质上仍然是一个类,即使Javascript没有实现它——任何看到该代码的人都会理解,您是基于类定义创建对象的

实现方式明显不同,但意图(非常接近)相同,使用相同的名称是相当公平的。如果没有其他原因,也不太可能引起混乱


我没有承诺是否有人会在研究或学术环境中与你争论……

JavaScript没有类,但我仍然称之为类。ECMAScript Harmony将引入JavaScript(尽管它们不是真正的类)。以下是您的代码在ECMAScript中的外观:

class Person {
    constructor(name, gender) {
        this.name   = name;
        this.gender = gender;
    }

    speak() {
        alert("Howdy, my name is " + this.name + ".");
    }
}

var person = new Person("Bob", "M");

person.speak();
这可以在当前JavaScript中模拟,如下所示:

var Person=defclass({
构造函数:函数(名称、性别){
this.name=名称;
这个。性别=性别;
},
讲:函数(){
警惕(“你好,我的名字是“+this.name+”);
}
});
var人员=新人员(“Bob”、“M”);
person.speak();
函数类(原型){
var constructor=prototype.constructor;
constructor.prototype=原型;
返回构造函数;

}
JavaScript没有类,但我仍然将其称为类。ECMAScript Harmony将引入JavaScript(尽管它们不是真正的类)。以下是您的代码在ECMAScript中的外观:

class Person {
    constructor(name, gender) {
        this.name   = name;
        this.gender = gender;
    }

    speak() {
        alert("Howdy, my name is " + this.name + ".");
    }
}

var person = new Person("Bob", "M");

person.speak();
这可以在当前JavaScript中模拟,如下所示:

var Person=defclass({
构造函数:函数(名称、性别){
this.name=名称;
这个。性别=性别;
},
讲:函数(){
警惕(“你好,我的名字是“+this.name+”);
}
});
var人员=新人员(“Bob”、“M”);
person.speak();
函数类(原型){
var constructor=prototype.constructor;
constructor.prototype=原型;
返回构造函数;

}
它通常被称为构造函数。ES6确实有类,并转换为类似于您的类。我把它称为一个类。@DanielA.White OP已经提到,“我知道Person是构造函数”。你也可以在“Javascript”中使用原型(注意我使用引号)
null
=
object
array
=
object
,函数可能也是对象。也就是说,是否所有对象(如果我错了,请纠正我)都根据语言的需要进行了修改。它通常被称为构造函数。ES6确实有类,并转换为类似于您的类。我把它称为一个类。@DanielA.White OP已经提到,“我知道Person是构造函数”。你也可以在“Javascript”中使用原型(注意我使用引号)
null
=
object
array
=
object
,函数可能也是对象。也就是说,是否所有对象(如果我错了请纠正我)都根据语言的需要进行了修改。就我个人而言,我不觉得术语构造函数非常令人满意,因为这也是仅用于类的构造函数的术语,即
Person
function它也不是我最喜欢的术语,虽然它确实感觉有点不准确,但根据我的经验,它在JS开发人员中使用得相当普遍,也更容易理解。在我目前的团队中,我们倾向于将其引用到一个类,因为差异通常并不显著,而且我们都知道我们的意思。由于这个模糊性,我通常使用TypeScript/CoffeeScript;)构造函数-它是最接近类的函数,在实践中,其行为类似于类。。。对我个人来说,我并不觉得构造函数这个词很令人满意,因为这也是一个用于类的构造函数的词,即
Person
function它也不是我最喜欢的词,因为它确实感觉有点不准确,但它在JS开发人员中使用得相当普遍,也更容易理解,以我的经验。在我目前的团队中,我们倾向于将其引用到一个类,因为差异通常并不显著,而且我们都知道我们的意思。由于这个模糊性,我通常使用TypeScript/CoffeeScript;)构造函数-它是最接近类的函数,在实践中,其行为类似于类。。。对我来说。我相信,这是最完整的一次