gpt4 book ai didi

javascript - 从函数访问变量

转载 作者:行者123 更新时间:2023-11-30 06:35:33 26 4
gpt4 key购买 nike

我是一名 C# 开发人员,正在尝试在 javascript 中使用面向对象的编程。对于以下代码

var np =  np || {};

np.Class1 = function () {

var var1,
var2,
var3;

var init = function(a) {
var1 = a;
this.var2 = a;
init3(a);
};

var init3 = function(b) {
this.var3 = b;
};

return {
init: init,
var1: var1,
var2: var2,
var3: var3
};
};

var t = new np.Class1();
t.init("t");
console.log("var1 " + t.var1);
console.log("var2 " + t.var2);
console.log("var3 " + t.var3);

我得到:

 var1 undefined 
var2 t
var3 undefined

我可以在 Class1 中获取私有(private)变量的唯一方法是使用 this.var2 = a; 但它不适用于从其他调用的函数功能。如何从函数 init3() 访问私有(private)变量?

已编辑

即使我像这样更改函数 init3()

var init3 = function(b) {
var3 = b;
};

结果是一样的。所以问题仍然有效。如何从函数中操作私有(private)变量?

最佳答案

您的返回声明

return {
init: init,
var1: var1,
var2: var2,
var3: var3
};

正在公开(设置为返回对象的属性)变量的初始值(在init运行之前),这些未定义。您稍后通过设置 this.var2 = a 覆盖 var2 的公开值,并尝试对 var3 执行类似的操作,但是(如前所述在以前的答案中)它不起作用,因为 init3 中的 this 指的是 window。因此对象属性 var1var3 保持未定义状态,只有 var2 发生变化。

如果这些变量是对象(包括数组和函数,如 init 是),它们将通过引用而不是值传递,所以 console.log("var1 "+ t.var1); 等将代表当前值,而不是初始值。

为了说明,try this :

np.Class1 = function () {
var someVariables = {},
self;

var init = function(a) {
self = this; // self now refers to the object from which init was called
someVariables.var1 = a;
this.var2 = a;
init3(a);
};

var init3 = function(b) {
self.var3 = b;
};

return {
init: init,
vars: someVariables
};
};

var t = new np.Class1();
t.init("t");
console.log("var1 " + t.vars.var1); // 't'
console.log("var2 " + t.var2); // 't'
console.log("var3 " + t.var3); // 't'
var newObj = {init: t.init}
newObj.init(true);
console.log(newObj); // Object {init: function, var2: true, var3: true}

关于javascript - 从函数访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14792629/

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