这是一个关于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);并获得所需的行为实例?