Javascript具有原型继承。您粘贴的代码有一个名为 init 的方法,声明为
类.prototype.init = ...
就像任何 klass 对象副本的公共方法一样。在 Javascript 中,每个对象都链接到一个名为“原型”的特殊对象。您放入该特殊对象的所有内容都可以访问原始对象的新实例。
例子:
var Human = function(n){
this.name = n;
};
Human.prototype.getName = function(){
return this.name;
};
//instance of Human
var pedro = new Human("Pedro");
现在 pedro 可以访问 Human.prototype 对象...
pedro.getName();
//return "Pedro"
pedro 原型从 Human.prototype “继承”,而 Human.prototype 从 Object.prototype “继承”。
让我们回到你的例子:
每个 klass 副本除了拥有自己的原型外,还会与 klass 原型相关联。所以每个 klass 副本(在这种情况下:Class 返回的每个对象)都将能够使用原始 klass 原型中定义的函数。
klass 是一个对象(函数是 js 中的对象),封装在另一个名为 Class 的对象/函数的定义中。
类生成 klass 的实例,因为这是 Class 函数返回的。
此代码说明了一种定义伪类“Class”的方法,该方法使用名为 init 的方法,可从函数 Class 返回的任何对象访问
这样你可以这样做:
var myClass = new Class(anArrayWithArguments);
在函数klass的上下文中:Class内部的“this”表示klass对象,this可以调用init,myClass可以像Class函数返回的新实例一样调用。
init 在您的示例中可以被视为构造函数。
从 init 调用的 apply 允许在对象 this (由 Class 返回的新对象)上使用一组参数调用 init