真的试图在Javascript中确定闭包/ OOP概念。任何帮助表示赞赏。输出是通过Chrome控制台。
这两个函数都构建并返回一个对象。 objMaker()
中的方法使用了这个'而staticMaker()
中的方法使用了封闭的对象'宾语。奇怪的是,结果没有区别。
特别是,我认为直接为staticMaker()
返回的对象的属性赋值不会被.showXY()
方法反映出来,因为该方法引用的是闭包,而不是返回的对象。
function objMaker(x, y) {
var obj = {};
obj.x = x;
obj.y = y;
obj.showXY = function() {
console.log("x: " + this.x + " y: " + this.y);
}
obj.changeXY = function(x, y) {
this.x = x;
this.y = y;
}
return obj;
}
function staticMaker(x, y) {
var obj = {};
obj.x = x;
obj.y = y;
obj.showXY = function() {
console.log("x: " + obj.x + " y: " + obj.y);
}
obj.changeXY = function(x, y) {
obj.x = x;
obj.y = y;
}
return obj;
}
objMaker()测试,使用 this :
var objMade = objMaker(100, 200);
console.log(objMade); // Object {x: 100, y: 200}
objMade.showXY(); // x: 100 y: 200
objMade.changeXY(11, 21);
objMade.showXY(); // x: 11 y: 21
objMade.x = "blah";
objMade.showXY(); // x: blah y: 21
console.log(objMade); // Object {x: "blah", y: 21}
objMaker()测试,使用 obj :
var staticMade = staticMaker(100, 200);
console.log(staticMade); // Object {x: 100, y: 200}
staticMade.showXY(); // x: 100 y: 200
staticMade.changeXY(11, 21);
staticMade.showXY(); // x: 11 y: 21
staticMade.x = "blah";
staticMade.showXY(); // x: blah y: 21, expected x: 11 y: 21
console.log(staticMade); // Object {x: "blah", y: 21}
再次感谢