javascript - JS中的OOP,this.init.apply如何与OOP一起工作

标签 javascript

<分区>

我正在学习 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

关于javascript - JS中的OOP,this.init.apply如何与OOP一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17376027/

相关文章:

javascript - 使用 video.js 的完整视频背景

javascript - 在 IE 页面中嵌入 VLC Player 1.1.7

javascript - 结合图片上传ajax和表单提交ajax

javascript - 在javascript中用数组替换字符串中的多个单词

javascript - 每个 amchart 切片的自定义渐变颜色

javascript - Dynamo 数据库类型转换错误 ValidationException : A value provided cannot be converted into a number

javascript - 从 child 身上移走 child

javascript - 如何将 Canvas 保存为 png 图像?

javascript - 可点击的 div 标签使用 not() 该 div 内的任何 div 标签

c# - 如何将文件从服务器复制到客户端系统?