在这个例子中是否有访问对象内部的变量?

时间:2014-05-20 19:57:19

标签: javascript

所以我最近一直在学习JavaScript中的对象和方法,并编写了这个小例子来帮助我理解“this”和方法等内容。

objectTest = function() {
    this.test = 1;
    this.test2 = 2;
};

thisThing = new objectTest

thisThing.test3 = [1,2,3];

objectTest.prototype.whatIsThis = function(){
    console.log(this.test);
};

thisThing.whatIsThis();

上面代码的输出是1,这是有道理的,因为它引用了我在对象中定义的this.test

如果我这样写objectTest怎么办:

objectTest = function() {
    var test = 1;
    var test2 = 2;
};

如果我console.log(this);方法中的whatIsThis我会得到: Object { test3=[3], whatIsThis=function()}

我很好奇,无论如何我都可以访问test和test2的值,而无需编写类似的内容:

objectTest = function() {
    var test = 1;
    var test2 = 2;
    return "test is" + test + "and test2 is" + test2;
};

如果可能的话,那么需要做这样的事情的实际例子呢?

1 个答案:

答案 0 :(得分:3)

你问的是什么并不是很清楚,因为你的“怎么办?”例子没有任何理由。

然而,你正在轻松接近JS中的一些有趣的东西,那就是'私有'变量的实现。

对于原型调用objectTest

objectTest = function() {
    var test = 1;
    var test2 = 2;
};

var ot = new objectTest();

testtest2实际上是私有变量,因为它们无法通过实例ot访问。

但是,它们根本无法访问,所以类似于:

objectTest.prototype.getTest = function () { // ... };

无法实施,因此它提供对test的访问权限,因为testthis调用getTest时不属于ot }。

怎么做......该怎么办?

嗯,你可以这样做:

objectTest = function() {
    var test = 1;
    var test2 = 2;

    this.getTest = function () { return test; };
    this.setTest = function (val) { test = val; };
};

var ot = new objectTest();

这些可行,因为test可通过getTestsetTest上的闭包获得。 test仍然不是ot的属性,因此您拥有的私有变量只能通过您的getter和setter进行修改。

更新

变量testtest2是函数objectTest的本地变量。这意味着,在objectTest的每次调用中,它们都会重新创建。 因此,objectTest个对象的新实例共享这些值。