为了账号安全,请及时绑定邮箱和手机立即绑定

调用外部函数作为对象的属性

调用外部函数作为对象的属性

慕容森 2023-06-15 16:14:23
我有一组对象,此刻里面只有一个对象。在这个对象中,我有一个函数可以详细说明同一对象的某些属性。该函数在数组外处理,但结果是 NaN,我不知道如何正确传递值。例子let arrayObj = [{  number1: 1,  number2: 2,  sum: sum(this.number1 , this.number2)}]function sum(n1, n2) {  return console.log(n1 + n2);}结果:NaN。for (let i in arrayObj){  console.log(arrayObj[i])}结果:{number1: 1, number2: 2, sum: undefined}
查看完整描述

4 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

如果在对象创建期间想要一个完全可用的对象,请使用 Function 对象。


let arrayObj = [new function(){

  this.number1 = 1;

  this.number2 = 2;

  this.sum = sum(this.number1 , this.number2)

}]


// minor edit to return the sum instead of returning the result of the console log

function sum(n1, n2) {

  console.log(n1 + n2);

  return n1 + n2;

}


for (let i in arrayObj){

  console.log(arrayObj[i])

}

但是,如果您以后需要此功能,并希望所有这些对象都可以访问它,那么请停止使用匿名对象并创建一个实际的类或原型。


原型:


function Point(number1, number2){

 this.number1 = number1;

 this.number2 = number2;

}

Point.prototype.sum = function(){

 return this.number1 + this.number2;

}


let arrayObj = [

 new Point(1,2),

 new Point(3,4),

 new Point(15,30)

];


for (let i in arrayObj){

  console.log(arrayObj[i].sum())

}

班级:


class Point {

  constructor(number1, number2){

    this.number1 = number1;

    this.number2 = number2;

  }

  get sum(){

      return this.number1 + this.number2;

  }

}


let arrayObj = [

 new Point(1,2),

 new Point(3,4),

 new Point(15,30)

];


for (let i in arrayObj){

  console.log(arrayObj[i].sum)

}


查看完整回答
反对 回复 2023-06-15
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

您可以在遍历对象时将该属性添加到对象。


const arrayObj = [{

    number1: 1,

    number2: 2,

}];


function sum(n1, n2) {

  return n1 + n2;

}


for (let i in arrayObj){

  arrayObj[i].sum = sum(arrayObj[i].number1, arrayObj[i].number2)

  console.log(arrayObj[i])

}


查看完整回答
反对 回复 2023-06-15
?
茅侃侃

TA贡献1842条经验 获得超21个赞

有一个简单的解决方案。您可以在 sum 属性中放置一个即时函数,并在该函数下,通过将对象的其他所需值转换为变量来发送它们。见下文:


function sum(n1, n2) {

    return n1 + n2;

}

const arrayObj = [{

        'number1': 1,

        'number2': 2,

        'sum': function () {

            let num1 = this.number1, num2 = this.number2;

            return sum(num1, num2);

        }

    }];


console.log(arrayObj.sum())


查看完整回答
反对 回复 2023-06-15
?
隔江千里

TA贡献1906条经验 获得超10个赞

对于这个问题,我找到了另一个有趣的解决方案(我不记得是在哪里找到的。)。使用javascript 的getter 函数可以轻松解决问题。您可以直接在对象中使用它来使用外部函数。如果对象的属性(键)使用外部函数来获取值,并且它的行为必须像普通的“键:值”对(不是方法/函数),那么 getter 函数是最好的使用方法得到价值。

function sum(n1, n2) {

    return n1 + n2;

}

const arrayObj = 

      {

        get sum() {return sum(this.number1, this.number2)},

        number1: 1,

        number2: 2,

        number3: 4,

        get totalsum() {return sum(this.sum, this.number3)} //using the sum property (that used external function) in another property.

      };



console.log(arrayObj);

console.log('the sum of '+arrayObj.number1+' & '+arrayObj.number2+' is: '+arrayObj.sum); 


console.log('the sum of '+arrayObj.sum+' & '+arrayObj.number3+' is: '+arrayObj.totalsum);



查看完整回答
反对 回复 2023-06-15
  • 4 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信