Javascript原型链接

时间:2017-06-13 22:54:47

标签: javascript inheritance

这是一个关于JavaScript Prototype Chaining的问题。

我已经阅读了一些关于此的文档,语法对我来说并没有多大意义。

https://wildlyinaccurate.com/understanding-javascript-inheritance-and-the-prototype-chain/

我理解JavaScript Prototypes的方式实际上是一些包含函数调用的语法糖果,它只是为一个名为this的新对象添加属性。

基本上,在没有原型的情况下,转换你在JavaScript中可能做的事情:

function PsuedoClass(arg0, arg1){
    var this = {};

    this.arg0 = arg0;
    this.arg1 = arg1;

    return this;
}

var obj = PsuedoClass(0, 1);

进入我们都知道和喜爱的事物:

function PsuedoClass(arg0, arg1){
    this.arg0 = arg0;
    this.arg1 = arg1;
}

var obj = new PsuedoClass(0, 1);

很自然地,人们期望在JavaScript中进行继承的方式本质上是调用链中的构造函数。它才有意义,将两个PsuedoClasses中的所有属性应用到一个对象中。

整个obj.prototype的事情对我来说似乎是不相干的。它似乎破坏了JavaScript似乎引导你的自然流程。如果只使用PsuedoClass.call(这个,arg0,arg1)会更直观;就够了。

它几乎可以,除了javascript&instanceof运算符失败。

除了增加可读性之外,还应该删除JavaScript的obj.prototype。

它简化了JavaScript继承,将2行减少到1。

如果他们制作PsuedoClass.call(这个,arg0,arg1)导致它成为PsuedoClass的一个实例,它就可以做到这样的事情:

function CustomRowClass(){
    this.someCustomMethod = function(){}
}

var tableRow = document.getElementById('myRow');
CustomRowClass.call(tableRow);

console.log(tableRow instanceof CustomRowClass); //returning true
tableRow.someCustomMethod();

我真的没有尝试在这里整体上使用JavaScript,我认为这种语言在很多方面确实很有意义,它只是这个Prototype链接不是我所期望的那样,并且它没有& #39;真的很直观。

我在这里遗漏了什么,有没有办法以直观的方式理解这个obj.prototype?关于它的一切只是为我抛弃了一些东西。

或者有一种简单的方法可以使用PsuedoClass.call(this,arg0,arg1);并获得所需的行为实例?

0 个答案:

没有答案