2015-06-20 100 views
0

我是JavaScript新手。 我想改变使用这些方法的正方形的长度。但它不起作用。我找不到,为什么。 Plz帮助,而不仅仅是投票。更改对象中的值

// to change sideLength 
 
this.set_sideLength = function(new_sideLength) { 
 
    this.sideLength = new_sideLength; 
 
}; 
 

 
var square = new Object(); 
 
square.sideLength = 6; 
 
square.set_sideLength = set_sideLength; 
 

 
// Calculate perimeter 
 
square.calcPerimeter = function() { 
 
    return this.sideLength * 4; 
 
}; 
 

 

 
var p = square.calcPerimeter(); 
 

 
// output 
 
console.log("Perimeter is: " + p + ", if side length is "+ sideLength); 
 

 
// New ouptput with new sideLength 
 
square.set_sideLength(10); 
 
console.log("Perimeter is: " + p + ", if side length is "+ sideLength);

+0

如果你看一下控制台你就会知道为什么它不工作:'回复ferenceError:sideLength未定义。 –

+0

是的。 sideLength = 6然后我试图改为10. –

+0

'square.sideLength = 6;'设置**对象**'square'的**属性**'slideLength'。它没有**创建**变量**'sideLength'。你真的认为浏览器更可能出现错误,而不是你?如果控制台显示某个未定义的错误,那么它没有被定义。 –

回答

1

的功能显得相当精致。您执行的console.log是旧值,并且不访问该对象上的属性。将sideLength设置为10后,您不会为该sideLength请求新的calcPerimeter。而你需要访问sideLengthsquare对象像square.sideLength

// to change sideLength 
 
this.set_sideLength = function(new_sideLength) { 
 
    this.sideLength = new_sideLength; 
 
}; 
 

 
var square = new Object(); 
 
square.sideLength = 6; 
 
square.set_sideLength = set_sideLength; 
 

 
// Calculate perimeter 
 
square.calcPerimeter = function() { 
 
    return this.sideLength * 4; 
 
}; 
 

 

 
var p = square.calcPerimeter(); 
 

 
// output 
 
console.log("Perimeter is: " + p + ", if side length is "+ square.sideLength); 
 

 
// New ouptput with new sideLength 
 
square.set_sideLength(10); 
 
p = square.calcPerimeter(); 
 
console.log("Perimeter is: " + p + ", if side length is "+ square.sideLength);

像@Felix克林提到你或许应该改变

// from 
 
this.set_sideLength = function(new_sideLength) { 
 
    this.sideLength = new_sideLength; 
 
}; 
 

 
// to 
 
function set_sideLength(new_sideLength) { 
 
    this.sideLength = new_sideLength; 
 
};

分配开玩笑根据this的实际情况,可能会对this上的房产产生不同的影响。在你的上下文中可能代表window对象。这就是为什么以下工作。

```

square.set_sideLength = set_sideLength; 

```

一般来说它被认为是不好的做法,将属性添加到window对象。因此,你会更好地使用其他方法,并且整个事情都是IIFE。

像这样

(function() { 
 
    'use strict'; 
 
// to change sideLength 
 
function set_sideLength(new_sideLength) { 
 
    this.sideLength = new_sideLength; 
 
} 
 

 
var square = new Object(); 
 
square.sideLength = 6; 
 
square.set_sideLength = set_sideLength; 
 

 
// Calculate perimeter 
 
square.calcPerimeter = function calcPerimeter() { 
 
    return this.sideLength * 4; 
 
}; 
 

 

 
var p = square.calcPerimeter(); 
 

 
// output 
 
console.log("Perimeter is: " + p + ", if side length is "+ square.sideLength); 
 

 
// New ouptput with new sideLength 
 
square.set_sideLength(10); 
 
p = square.calcPerimeter(); 
 
console.log("Perimeter is: " + p + ", if side length is "+ square.sideLength); 
 
})();

+0

如果代码引发错误,代码如何处理? 'this.set_sideLength = function(new_sideLength){}'真的应该是'function set_sideLength(new_sideLength){}'btw –

+0

这些函数是selfs。也许我应该澄清,更好:) –

+0

@FelixKling,因为他称为功能的方式是正确的,只有一件事需要修复。削减OP一些松懈。 –

0

您还没有叫calcPerimeter函数第二次也sideLength应该被称为square.sideLength

// to change sideLength 
 
this.set_sideLength = function(new_sideLength) { 
 
    this.sideLength = new_sideLength; 
 
}; 
 

 
var square = new Object(); 
 
square.sideLength = 6; 
 
square.set_sideLength = set_sideLength; 
 

 
// Calculate perimeter 
 
square.calcPerimeter = function() { 
 
    return this.sideLength * 4; 
 
}; 
 

 

 
var p = square.calcPerimeter(); 
 

 
// output 
 
document.write("Perimeter is: " + p + ", if side length is "+ square.sideLength); 
 

 
// New ouptput with new sideLength 
 
square.set_sideLength(10); 
 
var p = square.calcPerimeter(); 
 
document.write("<br/>Perimeter is: " + p + ", if side length is "+ square.sideLength);

0

function Square(){} 
 

 
Square.prototype.setSideLength = function(sideLength) { 
 
    this.sideLength = sideLength; 
 
}; 
 

 
var square = new Square(); 
 
square.sideLength = 6; 
 

 
Square.prototype.calcPerimeter = function() { 
 
    return this.sideLength * 4; 
 
}; 
 

 
console.log("Perimeter is: " + square.calcPerimeter() + 
 
    ", if side length is "+ square.sideLength); 
 

 
square.setSideLength(10); 
 
console.log("Perimeter is: " + square.calcPerimeter() + 
 
    ", if side length is "+ square.sideLength);

控制台:

Firefox console