gpt4 book ai didi

javascript私有(private)成员无法通过公共(public)方法访问

转载 作者:行者123 更新时间:2023-11-29 18:29:50 25 4
gpt4 key购买 nike

我有以下设置。 method 和 method1 都是 Student 类的公共(public)方法。但为什么 ca 只能“方法”访问私有(private)变量 p

​function Student() {
var p = 10;
this.method = function() {
document.write(p);
};
};

Student.prototype.method1 = function() {
document.write('here');
document.write(p);
};

var s = new Student();
s.method();
s.method1();

这有什么意义,我的意思是它是“一个无法访问私有(private)成员的公共(public)方法!”

最佳答案

JavaScript 的原型(prototype)继承并没有什么神奇之处。

Student 仍然是一个函数,p 是该函数的局部变量。不能以任何方式从外部代码访问它。 method 可以访问 p 因为它是在 Student 内部定义的,因此形成了一个闭包,但是 method1 是在 外部声明的code>Student 的范围。

将函数分配给另一个函数的原型(prototype)不能使其访问其局部变量。

考虑这个例子:

var p = 41;

function foo() {
console.log(p);
}

​function Student(){
var p = 10;
};

Student.prototype.bar = foo;

var s = new Student();
s.bar();
foo();

您可能认为因为 foo 是作为对象方法调用的,所以它可以访问局部变量,但事实并非如此。唯一动态确定的值是this,它是一个特殊的关键字。所有其他变量都通过作用域链严格定义。

关于javascript私有(private)成员无法通过公共(public)方法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521865/

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