gpt4 book ai didi

javascript - 继承方法(原型(prototype))和静态方法(表达式)有什么区别?

转载 作者:行者123 更新时间:2023-11-30 08:29:40 25 4
gpt4 key购买 nike

我在一个字符串上有这两个函数示例,它们的作用完全相同:

//ex1 - inherited method
String.prototype.slugLower = function() {
return this.split(' ').join('-').toLowerCase();
}

"hello World".slugLower();


//ex2 - static method
String.slugLower = function(str) {
return str.split(' ').join('-').toLowerCase();
}

String.slugLower("hello World");

两者都将返回 "hello-world"。它们之间有什么区别?我指的是性能/最佳实践。

谢谢

最佳答案

第一个是附加到原型(prototype)的方法。第二个是附加到 String 对象的方法。在经典的 OO 语言中,它们分别被称为“继承方法”和“静态方法”。

性能差异很小,在这里应该无关紧要。应该是什么:如果你认为一个方法是一类对象中每个对象的行为,那么它应该是一个原型(prototype)(继承)方法。如果你认为它应该是与类的多个对象或类本身相关的行为,你应该使用第二种模式。例如,“撒尿”或“大声吠叫”是每只狗的行为:Dog.prototype.peeOn, Dog.prototype.barkWithVolume; “世界上有多少只狗?”或“造一只新狗”不是每只狗的行为,而是“doghood”和一对狗的行为,分别是:Dog.censusDog.spawnPuppy

关于javascript - 继承方法(原型(prototype))和静态方法(表达式)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39911959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com