gpt4 book ai didi

javascript - 使用原型(prototype) JavaScript - 最佳实践

转载 作者:数据小太阳 更新时间:2023-10-29 03:52:00 26 4
gpt4 key购买 nike

目前我在一个项目中工作,我们正在编写面向对象的 JavaScript。在这个项目中,我看到了定义类的两种不同方式:

1: 在原型(prototype)上一次性声明函数

My.Namespace.ClassName = function(param1, param2) {
this.member1 = param1;
this.member2 = param2;
};

My.Namespace.ClassName.prototype = {
myFunction1: function() {
return this.member1 + " " + this.member2;
},

myFunction2: function(param1) {
this.member3 = paraml;
}
};

2:准备原型(prototype)上的各个函数

My.Namespace.ClassName = function(param1, param2) {
this.member1 = param1;
this.member2 = param2;
};

My.Namespace.ClassName.prototype.myFunction1 = function() {
return this.member1 + " " + this.member2;
};

My.Namespace.ClassName.prototype.myFunction2 = function(param1) {
this.member3 = paraml;
};

根据给定的两个示例,JavaScript 的行为方式是否有任何差异,或者仅仅是风格差异?

就我个人而言,我没有看到任何行为差异,但我感觉一定存在我目前遗漏的细微差异。

除此之外。我想知道这是否是一种常见做法,或者是否有更好的方法来定义类。

最佳答案

有细微的差别。在第一种方法中,当您覆盖原型(prototype)时,那里有一个现在丢失的属性。那是 constructor,它指向您的函数。构造函数允许您重新创建对象的类型。

您可以轻松取回它,因此通过手动设置使用第一种方法:

My.Namespace.ClassName.prototype = {
myFunction1: function() {
return this.member1 + " " + this.member2;
},

myFunction2: function(param1) {
this.member3 = paraml;
},
constructor: My.Namespace.ClassName
};

另请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor

关于javascript - 使用原型(prototype) JavaScript - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27043009/

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