在javascript中访问私有函数的方法?
问题描述:
我哈瓦简单JS功能在javascript中访问私有函数的方法?
var myFunction=function(){
var age=20;
this.name="bar";
var show=function(){
console.log(age);
}
}
和像创建实例:
var obj=new myFunction();
console.log(obj.show())
如何我解决这个问题?我试图搜索这个,但无法找到我的解决方案。 UPDATE 我希望所有私人成员保持不变。
答
试着改变你的代码
var myFunction=function(){
var age=20;
this.name="bar";
this.show=function(){
console.log(age);
}
}
改变你的表演变种是一个财产
答
一个干净的解决方案是使函数公开作为对象属性来访问:
var myFunction = function() {
var age = 20;
this.name = "bar";
this.show = function() {
console.log(age);
}
}
var obj = new myFunction();
obj.show();
答
在这里找到更多的信息:
best approach to member variables in object-oriented javascript?
使用var您声明show
作为变量而不是myFunction
的成员。 与age
同样的,如果它是一个类的成员,你也应该使用this
这一种方式来改变它:
var myFunction = function() {
this.age = 20;
this.name="bar";
this.show = function() {
console.log(age);
}
}
var obj = new myFunction();
console.log(obj.name);
obj.show();
答
的您的代码存在的问题是show
方法在myFunction
的功能范围之外无法访问。
在Javascript中,范围在函数中定义(忽略ES6块范围)。因此,变量age
,name
,show
的范围在该函数内。但是,当您使用this
并使用构造函数(new
)时,新创建的对象包含与this
关键字关联的属性。在你的情况下,你只将name
属性与新对象相关联,并且没有将show
函数与this
相关联。
其中一个解决方案是使用模块模式。您可以通过返回封装了公开提供的属性的对象来制作公共访问属性。因此,就您的情况而言,您可以从myFunction
中公开name
和show
方法。另外,不需要执行两次console.log。您可以通过obj.show()
获得输出。否则它会记录undefined
作为show
函数不会返回任何内容。
var myFunction=function(){
var age=20;
var name="bar";
var show=function(){
console.log(age);
}
return {
name : name,
show : show,
}
}
var obj=new myFunction();
obj.show()
'show'不是obj'的'的成员。它是'myFunction'的局部变量。 – CollinD
将'var show'变成'this.show',以便可以在myFunction的实例上访问 – Damon
为什么要做'console.log(obj.show())'?不'show()'*已经*调用'console.log()'? –