gpt4 book ai didi

Javascript对象构造函数和设置属性

转载 作者:行者123 更新时间:2023-12-03 08:08:19 25 4
gpt4 key购买 nike

在这样的场景中,当我们有一个对象时,

Object1 = function(param1){

this.attribute1=function(param1){
console.log("executing");
//random business logic could be anything
var newRelationship;

switch (param1){
case "epic": newRelationship= new Epic([this.startPoint, this.endPoint]);
break;
case "lame": newRelationship = "lamest";
break;
}
console.log(newRelationship);
return newRelationship;
}
}

对象属性实际上并未在构造函数调用时设置,例如var moveCircle = new Object1("epic),这意味着如果任何其他属性依赖于这个对象属性,我们将会遇到一些问题。

一种解决方案是实现一个setter并在对象构造之后立即调用它来设置我们的属性,但这意味着对象构造函数签名中不需要有参数。

Object1 = function(){

this.attribute1=""
this.setAttribute1 = function(param1){
console.log("executing");
//random business logic could be anything
var newRelationship;

switch (param1){
case "epic": newRelationship= new Epic([this.startPoint, this.endPoint]);
break;
case "lame": newRelationship = "lamest";
break;
}
console.log(newRelationship);
this.attribute1 = newRelationship;
}
}

但是由于某种原因(无法具体想到一个),我们只是想要或需要将参数作为构造函数的一部分,确保在创建新的实例时设置它的最佳方法是什么对象类型?我提出的解决方案是简单地让属性匿名函数进行 self 声明,但是在这种情况下,只要在运行时访问该属性,“业务逻辑”就会重新运行,这是愚蠢的。

 Object1 = function(param1){

this.attribute1=function(param1){
console.log("executing");
//random business logic could be anything
var newRelationship;

switch (param1){
case "epic": newRelationship= new Epic([this.startPoint, this.endPoint]);
break;
case "lame": newRelationship = "lamest";
break;
}
console.log(newRelationship);
return newRelationship;
}
}()

有人可以告诉我解决这个问题的最佳方法是什么吗?常见的做法是什么?在什么现实场景中使用 setter 并省略对象签名中的参数是不可行的

最佳答案

首先声明函数,然后在构造函数中使用它。

Object1 = function(param1){

function foo(param1){
console.log("I am called only once!");
//random business logic could be anything
var newRelationship;

switch (param1){
case "epic": newRelationship = "epic";
break;
case "lame": newRelationship = "lamest";
break;
}
console.log(newRelationship);
return newRelationship;
}
this.attribute1 = foo(param1);
}

var obj = new Object1('epic');
obj.attribute1;
obj.attribute1;
obj.attribute1;
obj.attribute1;
obj.attribute1;
obj.attribute1;
console.log(obj.attribute1);

关于Javascript对象构造函数和设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34265940/

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