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;
}