Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这种继承和原型继承是否比直接引用的性能更好?_Javascript_This_Prototype - Fatal编程技术网

Javascript 这种继承和原型继承是否比直接引用的性能更好?

Javascript 这种继承和原型继承是否比直接引用的性能更好?,javascript,this,prototype,Javascript,This,Prototype,这样做更好吗 var obj1 = { a: function(){...} } var obj2 = Object.assign(Object.create(obj1),{ b: function(){ this.a(); } }); obj2.b(); 或者 我主要是用第一种模式构建一个webapp,但我开始怀疑使用“this”对性能的影响是否真的值得多做一步 抱歉,如果这是愚蠢的,或者之前已经发布过,我仍在试图围绕原型继承的概念进行思考,这真的很让人困惑正如评论中所指出的

这样做更好吗

var obj1 = {
    a: function(){...}
}
var obj2 = Object.assign(Object.create(obj1),{
    b: function(){ this.a(); }
});
obj2.b();
或者

我主要是用第一种模式构建一个webapp,但我开始怀疑使用“this”对性能的影响是否真的值得多做一步


抱歉,如果这是愚蠢的,或者之前已经发布过,我仍在试图围绕原型继承的概念进行思考,这真的很让人困惑

正如评论中所指出的,您的语法是错误的,因此两者都不起作用

但是,您的问题实际上只是“继承比不使用继承好吗?”。JS使用原型继承的事实并不是问题所在

答案将基于观点,所以这是我的

继承更好,因为代码变得更灵活,更不脆弱。脆弱的代码在软件设计中总是要避免的。这会增加代码的复杂性吗?当然可以,但不要混淆复杂性和可读性。似乎许多开发人员以“这很难阅读和理解”的名义回避更复杂的代码,而这本来不应该是对代码的试金石测试。代码模式通常会给代码库增加额外的复杂性和重定向层,但您得到的是一个更灵活的代码库,可以适应变化

使用
根本不会影响性能,因为
是一个自动指定的对象引用,无论您是否使用它都会发生。而且,它只是一个内存地址的副本,而不是对象本身的副本

从性能的角度来看,考虑到现代用户代理所采用的优化,您不太可能注意到任何明显的差异,但是继承模式从本质上来说,随着原型链成为一个因素,从运行时开始需要更多的资源。

这两种方法在性能方面是相等的。 它们之间的区别在于可伸缩性取决于需要使用
对象创建的对象数量。create
函数会导致每次调用
对象。create
会创建一个额外的实例。因此,我们不必将性能和可伸缩性混为一谈


另一方面,对我来说,继承更干净,因为它提供了更具可读性和组织性的代码,因此您已经在未来的维护中获得了时间

,这两个代码片段都会产生语法错误,因为分号不能出现在这样的对象文本内部。你能让代码更清楚吗?…而且,
obj1.a()
返回函数返回的任何内容,但是你没有设置对象属性(key)来存储它,就像
var obj2={someKey:obj1.a()}
它不是性能而是菜单性的东西是的,它只是一个愚蠢的东西哈哈,我的意思是更多的b:function(){obj1.a():}我会马上改正的edit@BjörnLindqvist在没有答案的情况下寻找是/否答案,这并不是保持问题开放的理由。这是一个基于意见的答案。
var obj1 = {
    a: function(){...}
}
var obj2 = {
    b: function(){ obj1.a(); }
});
obj2.b();