的功能显得相当精致。您执行的console.log是旧值,并且不访问该对象上的属性。将sideLength
设置为10后,您不会为该sideLength
请求新的calcPerimeter
。而你需要访问sideLength
的square
对象像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);
})();
如果你看一下控制台你就会知道为什么它不工作:'回复ferenceError:sideLength未定义。 –
是的。 sideLength = 6然后我试图改为10. –
'square.sideLength = 6;'设置**对象**'square'的**属性**'slideLength'。它没有**创建**变量**'sideLength'。你真的认为浏览器更可能出现错误,而不是你?如果控制台显示某个未定义的错误,那么它没有被定义。 –