我想知道函数和类之间有什么区别。 两者都使用关键字函数,这两者之间有明显的区别吗?
答案 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)
function
与class
之间的区别 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)