我有一个简单的 js 功能
var myFunction=function(){
var age=20;
this.name="bar";
var show=function(){
console.log(age);
}
}
并创建实例,例如:
var obj=new myFunction();
console.log(obj.show())
怎么能我解决它?我试图搜索SO但是找不到我的解决方案。 的更新 我希望所有私人成员保持不变。
答案 0 :(得分:3)
您的代码存在的问题是,在show
的函数范围之外无法访问myFunction
方法。
在Javascript中,范围是在函数中定义的(忽略ES6块范围)。因此,变量[{1}},age
,name
的范围在函数内。但是,当您使用show
并使用构造函数(this
)时,新创建的对象包含与new
关键字关联的属性。在您的情况下,您只将this
属性与新对象相关联,并且未将name
函数与show
相关联。
其中一个解决方案是使用模块模式。您可以通过返回封装公开公开属性的Object来创建公共可访问属性。因此,在您的情况下,您可以从this
公开name
和show
方法。此外,无需两次执行console.log。您可以按myFunction
获取输出。否则,它将记录obj.show()
,因为undefined
函数不会返回任何内容。
show

答案 1 :(得分:0)
尝试将代码更改为
var myFunction=function(){
var age=20;
this.name="bar";
this.show=function(){
console.log(age);
}
}
将show var更改为属性
答案 2 :(得分:0)
一个干净的解决方案是将该函数作为对象属性公开访问:
your_object = SetNullStringToDefault<EntityType>(your_object, "Default Value");
&#13;
答案 3 :(得分:0)
使用var,您将public class NotificationHub : Hub
{
private IHttpContextAccessor _contextAccessor;
private HttpContext _context { get { return _contextAccessor.HttpContext; } }
public NotificationHub(IHttpContextAccessor contextAccessor)
{
_contextAccessor = contextAccessor;
}
public async Task JoinGroup()
{
Groups.Add(Context.ConnectionId, $"notification_{_context.User.Identity.Name}");
}
public void Send(JsonResult notification)
{
Clients.Client(Context.ConnectionId).sendNotification(notification);
}
}
声明为变量,而不是show
的成员。
与myFunction
相同,如果是类成员,则还应使用age
这是改变它的一种方式:
this
&#13;