所以我最近一直在学习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;
};
如果可能的话,那么需要做这样的事情的实际例子呢?
答案 0 :(得分:3)
你问的是什么并不是很清楚,因为你的“怎么办?”例子没有任何理由。
然而,你正在轻松接近JS中的一些有趣的东西,那就是'私有'变量的实现。
对于原型调用objectTest
:
objectTest = function() {
var test = 1;
var test2 = 2;
};
var ot = new objectTest();
test
和test2
实际上是私有变量,因为它们无法通过实例ot
访问。
但是,它们根本无法访问,所以类似于:
objectTest.prototype.getTest = function () { // ... };
无法实施,因此它提供对test
的访问权限,因为test
在this
调用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
可通过getTest
和setTest
上的闭包获得。 test
仍然不是ot
的属性,因此您拥有的私有变量只能通过您的getter和setter进行修改。
变量test
和test2
是函数objectTest
的本地变量。这意味着,在objectTest
的每次调用中,它们都会重新创建。
因此,objectTest
个对象的新实例不共享这些值。