Javascript 在对象中添加函数

Javascript 在对象中添加函数,javascript,function,object,methods,Javascript,Function,Object,Methods,我尝试向对象添加函数。为什么不起作用?结果未定义。请帮忙 var calc=函数(){ 这个.num1=5, 这个.num2=5, 计算=函数(){ this.result=this.num1*this.num2; } }; var myObj=[]; 对于(var i=0;i请尝试使用此关键字将函数与对象关联。当前计算函数未与对象关联 还需要返回结果并按索引访问对象 所以正确的答案是 var calc = function() { this.num1 = 5,

我尝试向对象添加函数。为什么不起作用?结果未定义。请帮忙


var calc=函数(){
这个.num1=5,
这个.num2=5,
计算=函数(){
this.result=this.num1*this.num2;
}
};
var myObj=[];

对于(var i=0;i请尝试使用
关键字将函数与对象关联。当前计算函数未与对象关联

还需要返回结果并按索引访问对象

所以正确的答案是

    var calc = function() {
      this.num1 = 5,
        this.num2 = 5,
        this.compute = function() {
          this.result = this.num1 * this.num2;
return this.result;
        }
    };

    var myObj = [];
    for (var i = 0; i < 5; i++) {
      myObj.push(new calc())
    };
    //calc.compute();

    document.write(myObj[0].compute());
var calc=function(){
这个.num1=5,
这个.num2=5,
this.compute=函数(){
this.result=this.num1*this.num2;
返回此结果;
}
};
var myObj=[];
对于(变量i=0;i<5;i++){
myObj.push(新计算())
};
//计算();
document.write(myObj[0].compute());
问题:
  • 缺少括号
    document.write(myObj.compute);
    。它应该是
    document.write(myObj.compute());
  • myObj
    是类型为
    Calc
    的对象数组。因此,您需要索引来访问对象的任何属性。
    myObj[0]。compute()
  • compute
    函数中缺少return语句。您正在为
    此赋值。results
    但不返回任何内容。我已删除
    结果
    并添加了
    return
    语句
  • 以下代码表示相同的代码:

    var calc=function(){
    //存储当前上下文
    var self=这个;
    self.num1=5,
    self.num2=5,
    计算=函数(){
    返回self.num1*self.num2;;
    }
    //公共财产。。。
    返回{
    计算:计算
    }
    };
    var myObj=[];
    对于(变量i=0;i<5;i++){
    myObj.push(新计算())
    };
    //计算();
    
    document.write(myObj[0].compute());
    有几个直接的问题。首先,构造函数应该以
    函数Calc(args)
    的样式编写,以区别于其他函数,并解决范围/上下文问题

    其次,您的方法应该是
    this.compute

    第三,虽然将数字添加到
    结果
    变量很好,但从代码的其余部分来看,您似乎希望从
    计算
    返回一些东西,但实际上并非如此

    最后,为什么要创建五个相同的对象?我已经更正了,但也更新了下面的代码,以向您展示我的意思

    function Calc(first, second) {
    
       // assign the arguments to num1 and num2
       this.num1 = first;
       this.num2 = second;
       this.compute = function() {
    
         // we return the result rather than assigning it
         return this.num1 * this.num2;
       }
    };
    
    var myObj = [];
    
    // here we use i and 5 as the new object parameters
    for (var i = 0; i < 5; i++) {
      myObj.push(new Calc(i, 5));
    };
    
    for (var i = 0; i < 5; i++) {
      console.log(myObj[i].compute()); // 0, 5, 10, 15, 20
    };
    

    您正确地使用了
    this.num1
    ,但您只是将
    compute
    定义为一个局部(实际上是全局)变量,而不是一个公共方法。
    myObj
    Array
    ,要从数组中获取项目,您应该使用从
    0
    n
    -
    myObj[0]的索引
    放在一边,为什么你想要5个重复的函数?当你创建一个对象时,传入参数不是更有意义吗?这样
    compute
    做的不仅仅是把相同的数字加在一起?你在语句之间放逗号而不是分号有什么特别的原因吗?@torazaburo我只是复制粘贴了代码,然后我主要使用半柱,但我发现它们都能工作,但我不知道有什么主要区别。如果你知道的话,请告诉我share@Downvoter,请告诉我遗漏了什么。如果能学到一些新东西,我将不胜感激。您似乎不太明白
    这个
    新的
    是如何工作的。1和2完全是错误的。谢谢@deceze.My bad.忘了这保存了调用对象的对象引用。将更新我的答案。不知道我怎么会错过它。现在,如果你也在原型上定义
    compute
    。:)这是明天课程的一部分。
    function Calc(first, second) {
       this.num1 = first;
       this.num2 = second;
    };
    
    Calc.prototype.compute = function() {
       return this.num1 * this.num2;
    }