gpt4 book ai didi

javascript - 私有(private)函数调用 protected 函数?

转载 作者:行者123 更新时间:2023-12-03 08:11:12 24 4
gpt4 key购买 nike

我试图了解私有(private)属性和 protected 属性在 javascript 中的工作原理。

我已经了解了总体思路,并且正在尝试在属性之间进行测试调用。

到目前为止,我发现:

  • 公众可以调用 protected
  • protected 可以调用私有(private)
  • 公共(public)不能称为私有(private)
  • 私有(private)可以调用公共(public)
  • protected 可以调用公共(public)

到目前为止一切顺利,但是当我尝试将私有(private)函数调用设为 protected 函数时,出现未定义的错误。

测试.js:

var Test = require('./test_.js'),
test = new Test();

test.prot_func();

test_.js:

function publ_func() {
console.log('Public');
}

function Test() {
var priv_var = 0;

this.prot_func = function prot_func() {
//OK
console.log('Protected');
priv_func();
};

function priv_func() {
//OK
console.log('Private');
//OK
//publ_func();
test_prot();
//test_prot is not defined?
//Also tried: this.test_prot();
}

this.test_prot = function test_prot() {
console.log('Protected');
publ_func();
};
}

Test.prototype.publ_func = publ_func;

module.exports = Test;

我只是有一个语法错误,还是没有办法从私有(private)方法调用 protected 方法?

最佳答案

要理解为什么会发生这种情况,首先您需要了解对象的每个部分。

函数test_protTest对象的一个​​属性。与prot_func相同。

但是,priv_func 是一个常规函数,只需在 Test 对象的范围内定义即可。基本上,该函数与您的对象并不真正相关

这就是为什么当您调用 test_prot 时它是未定义的,因为它是 Test 的属性,并且您没有给它一个调用对象。

function priv_func() {
test_prot(); // <--- there is no calling object, even though this is a property of Test
};

因此,如果您想在该函数中调用 test_prot,则需要为其提供一个调用对象。像这样的事情会起作用:

...
// Define a reference to Test object within scope of Test
var self = this;
...

function priv_func() {
self.test_prot(); // <--- now it has a calling Test object, and will work
};

关于javascript - 私有(private)函数调用 protected 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34138247/

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