我正在学习 Javascript 中的 OOP,我遇到了第一个示例,但我不清楚第三行的作用 ==> this.init.apply(this, arguments);
var Class = function(arguments){
var klass = function(){
this.init.apply(this, arguments);
};
klass.prototype.init = function(){};
return klass;
};
有人介意解释一下整个事情吗?我理解其中的大部分内容,但我只是想感觉自己正在以正确的方式思考这个问题。
Javascript 具有原型(prototype)继承。
您粘贴的代码有一个名为 init 的方法声明为
klass.prototype.init = ...
就像是 klass 对象的任何副本的公共(public)方法。
在 Javascript 中,每个对象都链接到一个名为“原型(prototype)”的特殊对象。您放入该特殊对象中的所有内容都可以访问原始对象的新实例。
例子:
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 原型(prototype)“继承”自 Human.prototype,而 Human.prototype“继承”自 Object.prototype。
让我们回到你的例子:
klass 的每个副本除了拥有自己的原型(prototype)外,还将与 klass 原型(prototype)链接。因此,klass 的每个副本(在这种情况下:Class 返回的每个对象)都将能够使用原始 klass 原型(prototype)中定义的函数。
klass是一个对象(函数是js中的对象)封装在另一个名为Class的对象/函数的定义中。
类生成 klass 的实例,因为这是类函数返回的内容。
这段代码说明了一种定义伪类“Class”的方法,它有一个名为 init 的方法,可以从函数 Class 返回的任何对象访问
这样你可以做:
var myClass = new Class(anArrayWithArguments);
在函数 klass 的上下文中:Class 中的“this”表示 klass 对象,this 可以调用 init,myClass 可以像 Class 函数返回的新实例一样调用。
在您的示例中,可以将 init 视为构造函数。
从 init 调用的 apply 允许使用对象 this(类要返回的新对象)的参数数组调用 init