Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何引用JavaScript函数中的不同位置_Javascript_Oop_Encapsulation - Fatal编程技术网

如何引用JavaScript函数中的不同位置

如何引用JavaScript函数中的不同位置,javascript,oop,encapsulation,Javascript,Oop,Encapsulation,我试图从JavaScript中的其他函数中访问设置和值/函数,我相信可能有一个简单的规则我没有。下面是一个非常简化的代码示例: function h(){ // example settings I want to declare for h() this.settings = { critical: 400, readCritical: function(){ return this.settings.critical;

我试图从JavaScript中的其他函数中访问设置和值/函数,我相信可能有一个简单的规则我没有。下面是一个非常简化的代码示例:

function h(){
    // example settings I want to declare for h()
    this.settings = {
        critical: 400,
        readCritical: function(){
            return this.settings.critical; // /!\ but this does not work
        }
    }
    this.hsub = function(){
        return this.settings.critical; // /!\ this does not work either
    }

}
var x = new h();
console.log(x.settings.critical); // This works fine
console.log(x.settings.readCritical()); // I can *call* this fine, but it can't read outside itself
console.log(x.hsub()); // I can also call this but same problem
console.log(h.settings); // `undefined`; I understand I can't see directly into the function
您可以看到
this.settings.critical
值,我正试图从相应的函数
readCritical
hsub
中访问该值。我该怎么做?特别是从实例化的
x


这也是第二个问题,但与此相关,我更愿意声明
var settings={}
,而不是
this.settings
。这是可能的还是可取的

啊,另一个古老的经典闭包问题

有两种解决方法:

function h(){
    var self = this;
    this.settings = {
        critical: 400;
        readCritical: function() {
            return self.settings.critical();    // otherwise this.settings will 'cover' `this`.
        }
   }
}

readCritical: () => this.settings.critical();    // arrow functions won't form a function scope

啊,另一个古老的经典闭包问题

有两种解决方法:

function h(){
    var self = this;
    this.settings = {
        critical: 400;
        readCritical: function() {
            return self.settings.critical();    // otherwise this.settings will 'cover' `this`.
        }
   }
}

readCritical: () => this.settings.critical();    // arrow functions won't form a function scope

您需要做的唯一更改是从
readCritical
功能中删除
.settings

hsub
按原样工作。不知道你为什么认为有问题

函数h(){
此参数。设置={
临界值:400,
readCritical:function(){
返回this.critical;//直接引用'critical'
}
}
this.hsub=函数(){
返回this.settings.critical;//这很好用
}
}
var x=新的h();
console.log(x.settings.critical);//400
console.log(x.settings.readCritical());//400
console.log(x.hsub());//400
//预计这是`未定义的'`

console.log(h.settings)
您需要做的唯一更改是从
readCritical
功能中删除
.settings

hsub
按原样工作。不知道你为什么认为有问题

函数h(){
此参数。设置={
临界值:400,
readCritical:function(){
返回this.critical;//直接引用'critical'
}
}
this.hsub=函数(){
返回this.settings.critical;//这很好用
}
}
var x=新的h();
console.log(x.settings.critical);//400
console.log(x.settings.readCritical());//400
console.log(x.hsub());//400
//预计这是`未定义的'`

console.log(h.settings)这个
的范围(以及设置它的绑定函数)是JS中经常讨论的话题。然而,您似乎并不是专门寻找
这个
,而是共享变量,还有另一种选择。总而言之,没有最好的答案,但是因为您还想声明
var settings={}
:您实际上可以并且可以访问其他函数中可用的局部变量

函数h(){
var settings={//var settings是函数h(或其实例)的一个局部变量。如果允许ES6,则首选“let”或“const”
临界值:400,
readCritical:function(){
返回设置.critical;
}
};
this.settings=settings;//this.settings与var settings不是同一变量,因此该语句有效
this.hsub=函数(){
return settings.critical;//使用本地(var)设置
}
}
var x=新的h();
console.log(x.settings.critical);
console.log(x.settings.readCritical());

console.log(x.hsub())这个
的范围(以及设置它的绑定函数)是JS中经常讨论的话题。然而,您似乎并不是专门寻找
这个
,而是共享变量,还有另一种选择。总而言之,没有最好的答案,但是因为您还想声明
var settings={}
:您实际上可以并且可以访问其他函数中可用的局部变量

函数h(){
var settings={//var settings是函数h(或其实例)的一个局部变量。如果允许ES6,则首选“let”或“const”
临界值:400,
readCritical:function(){
返回设置.critical;
}
};
this.settings=settings;//this.settings与var settings不是同一变量,因此该语句有效
this.hsub=函数(){
return settings.critical;//使用本地(var)设置
}
}
var x=新的h();
console.log(x.settings.critical);
console.log(x.settings.readCritical());

console.log(x.hsub())看起来您只想要一个实例。如果是这样,那么只需使用对象文字符号立即创建实例:

var h={
设置:{
临界值:400,
readCritical:function(){
返回此文件。关键;
}
},
hsub:function(){
返回此.settings.critical;
}
}
console.log(h.settings.critical);
log(h.settings.readCritical());
console.log(h.hsub());

console.log(h.settings)看起来您只想要一个实例。如果是这样,那么只需使用对象文字符号立即创建实例:

var h={
设置:{
临界值:400,
readCritical:function(){
返回此文件。关键;
}
},
hsub:function(){
返回此.settings.critical;
}
}
console.log(h.settings.critical);
log(h.settings.readCritical());
console.log(h.hsub());

console.log(h.settings)
您希望
h.settings
返回什么?您认为所有实例的设置完全相同吗?因为现在有些实例可以区分为
x.settings.critical=200
。那么你有一些是200,一些是400,那么关键的是什么呢?另外,为什么您更喜欢
var设置
?然后您将如何公开
settings
?有很多问题,但是
h.settings
是一个对象,不应该返回任何内容-但是我想要
x.settings.something