javascript原型prototype,原型链简要纪要

近期在研究成熟javascript三方组件移植鸿蒙的问题,由于鸿蒙里Arki引擎与web/nodejs的语法以及内置对象的差异,看到很多同学大都采用侵入式修改来移植,因此往往修改几个方法,就把整个git库给移植了。

针对之前了解的javascript原型,原型链的知识,本周逐步复习了下,重点在B站上听了下【跟山地人学JavaScript系列教程】课16.理解什么是原型-Prototype和__prop__和原型链?_哔哩哔哩_bilibili其里面说的文章见:对象原型 - 学习 Web 开发 | MDN

利用Javascript对象原型可修改的机制,在独立的patch.js中非侵入式修改utils对象的padStart方法,修改问题代码的js语法。使用该方式的优点是:不需要修改和维护原三方组件的源码,仅仅需维护一个补丁代码。具体例子暂不方便从公司电脑中放出来。

简单记录下通用知识点:

JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。

function doSomething(){}
doSomething.prototype.foo = "bar";
var doSomeInstancing = new doSomething();
doSomeInstancing.prop = "some value";
console.log("doSomeInstancing.prop:      " + doSomeInstancing.prop);
console.log("doSomeInstancing.foo:       " + doSomeInstancing.foo);
console.log("doSomething.prop:           " + doSomething.prop);
console.log("doSomething.foo:            " + doSomething.foo);
console.log("doSomething.prototype.prop: " + doSomething.prototype.prop);
console.log("doSomething.prototype.foo:  " + doSomething.prototype.foo);
console.log(doSomething.prototype  === doSomeInstancing.__proto__);

运行结果:

doSomeInstancing.prop:      some value
doSomeInstancing.foo:       bar
doSomething.prop:           undefined
doSomething.foo:            undefined
doSomething.prototype.prop: undefined
doSomething.prototype.foo:  bar
true

修改prototype原型的例子,参考nodejs学习笔记 之prototype - JavaShuo

扫描二维码关注公众号,回复: 14911726 查看本文章

因此如果要非侵入式修改,如果原库export的是一个对象,则直接修改这个对象的属性。如果原库修export一个function(类),则修改这个对象的原型prototype.

当然也是希望后期鸿蒙能把语法做与nodejs/web标准更兼容,或者能使用pollify的方式保持一致,能直接使用开源的js组件

猜你喜欢

转载自blog.csdn.net/sd2131512/article/details/125220729