对象生成器功能,'这个'并且在变量时关闭的行为相同

时间:2016-01-26 19:15:11

标签: javascript

真的试图在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}

再次感谢

0 个答案:

没有答案