gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:49:21 24 4
gpt4 key购买 nike

所以我最近一直在学习 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;
};

如果我在 whatIsThis 方法中 console.log(this); 我将简单地得到:对象 { test3=[3], whatIsThis=function()}

我很好奇我是否可以访问 test 和 test2 的值而无需编写如下内容:

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

此外,如果这是可能的,需要做这样的事情的实际例子是什么?

最佳答案

由于您的“如果?”,因此不太清楚您在问什么。这个例子没有任何理由。

但是,您正在接近 JS 中一些有趣的东西,那就是“私有(private)”变量的实现。

对于原型(prototype)调用objectTest:

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

var ot = new objectTest();

testtest2 实际上是私有(private)变量,因为它们不能通过实例 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 可以通过 getTestsetTest 上的闭包获得。 test 仍然不是 ot 的属性,因此您拥有只能通过 getter 和 setter 进行修改的私有(private)变量。

更新

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

关于javascript - 在这个例子中是否有办法访问对象内部的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23768765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com