javascript:函数和类之间的区别是什么

时间:2012-08-15 13:28:18

标签: javascript

我想知道函数和类之间有什么区别。  两者都使用关键字函数,这两者之间有明显的区别吗?

6 个答案:

答案 0 :(得分:17)

技术上没有课,它们都只是功能。可以使用关键字new作为构造函数调用任何函数,并且该函数的prototype属性用于从中继承方法的对象。

“类”仅用于概念性地描述上述实践。

所以当有人对你说“制作颜色课”或其他什么时,你会这样做:

function Color(r, g, b) {
    this.r = r;
    this.g = g;
    this.b = b;
}

Color.prototype.method1 = function() {

};

Color.prototype.method2 = function() {

};

当你分解它时,只有一个函数和一些名为prototype的属性的赋值,所有 通用的javascript语法,没什么好看的。

当你说var black = new Color(0,0,0)时,这一切都变得有些神奇。然后,您将获得一个包含属性.r.g.b的对象。那个对象 还会有Color.prototype的隐藏[[prototype]]链接。这意味着即使black.method1()对象中不存在.method1(),您也可以说black

答案 1 :(得分:4)

在javascript中,没有课程。 javascript使用原型继承而不是基于类的继承。许多人会在javascript中引用类,因为它更容易理解,但它纯粹是一个类比。

在基于类的继承中,您创建一个类(如果愿意,可以创建“蓝图”),然后从该类中实例化对象。

在原型继承中,对象直接从另一个父对象实例化,而不需要任何“蓝图”。

有关Class vs Prototype继承的更多信息,请参阅the wikipedia page

答案 2 :(得分:0)

术语 class 通常用于面向对象的编程语言上下文中。类是将在实例化时创建的对象的模板。 JavaScript是一种基于原型的编程语言,因此使用术语类来描述JavaScript原型有点奇怪。在JavaScript中,原型被创建为函数

答案 3 :(得分:0)

在这个talk中突出显示了函数和类之间的一个关键区别,它表明函数是一个可以携带数据的行为,而相反,一个类是可以携带行为的数据。

答案 4 :(得分:0)

(构造函数)functionclass之间的区别

javascript中的class关键字仅仅是构造函数的语法糖,该构造函数仍在使用javascript的原型系统。存在的唯一“差异”是语法,实际上它们是相同的。

应通过一个示例对此进行澄清:

class PersonClass {
  constructor(name) {
    this.name = name;
  }
  
  speak () { console.log('hi'); }
}

console.log(typeof PersonClass); 
// logs function, a class is a constructor function under the hood.

console.log(PersonClass.prototype.speak);
// The class's methods are placed on the prototype of the PersonClass constructor function

const me = new PersonClass('Willem');

console.log(me.name); 
// logs Willem, properties assinged in the constructor are placed on the newly created object


// The constructor function equivalent would be the following:
function PersonFunction (name) {
  this.name = name;
}

PersonFunction.prototype.speak = function () { console.log('hi'); }

答案 5 :(得分:0)

课程

类声明的作用域仅限于其包含块。这是一个错误 在同一块中两次声明一个类名。类的定义是 没有吊起。

功能

函数声明是严格模式下的块范围。

下表总结了类和函数之间的区别 enter image description here