gpt4 book ai didi

javascript - 从原型(prototype)调用私有(private)js函数

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

我一整天都在阅读这些帖子,但没有想出任何对我有用的东西。

我有一个 JS 对象

function MyObject(a,b){
this.member_a = a;
this.member_b = b;



function operation1(){
$('#someDiv1').text(this.a);
}

function operation2(){
$('#someDiv1').text(this.b);
}

MyObject.prototype.PublicFunction1 = function(){

//There is an ajax call here
//success
operation1();
//failure
operation2();

}
}

大致就是这样。这就是我现在的模式。它位于外部 JS 文件中。我的页面创建了一个 MyObject(a,b) ,断点显示 member_amember_b 均已正确初始化。在我的页面调用 MyObject.PublicFunction1(); 发生其他一些魔法之后,ajax 执行,我输入 operation1()operation2()但是当我在这些 member_amember_b 内部时,它们都是 undefined 并且我不明白为什么。我失去了范围之类的东西。我在对象体声明之外拥有私有(private)函数和原型(prototype),以及两者的组合。如何从对象的原型(prototype)调用私有(private)函数来处理对象的数据?

我也尝试过

ClassBody{
vars
private function
}

prototype{
private function call
}

并且一直在阅读this

最佳答案

operation1operation2 没有上下文,因此在全局 context 中执行(其中 this == window)。

如果您想为它们提供上下文,但保持它们的私密性,请使用 apply:

operation1.apply(this);
operation2.apply(this);

进一步阅读 apply 方法 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

编辑

@FelixKing 是正确的 - 您的代码应该更合适地编写为这样(使用 Module Pattern ):

//encapsulating scope
var MyObject = (function() {

function operation1(){
$('#someDiv1').text(this.a);
}

function operation2(){
$('#someDiv1').text(this.b);
}

var MyObject = function(a,b) {
this.member_a = a;
this.member_b = b;
};

MyObject.prototype.PublicFunction1 = function(){

//There is an ajax call here
//success
operation1.apply(this);
//failure
operation2.apply(this);

}

return MyObject;
}());

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

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