Javascript 访问功能内的成员/从外部设置成员

Javascript 访问功能内的成员/从外部设置成员,javascript,closures,Javascript,Closures,我真的很想这样做: var Html = function() { alert('internal: ' + this.val); }; Html.val = "x"; alert('external: ' + Html.val); Html(); 但它不起作用。为什么?如何让函数代码在创建后查看设置的值 -更新- 因为我最初的帖子的意图不太清楚,而且因为我发布了一个比其他帖子更接近意图的解决方案,请允许我说,我想要的是一种访问函数内部成员的机制,其明确目的是能够创建一个通用函数,该函

我真的很想这样做:

var Html = function() {
    alert('internal: ' + this.val);
};
Html.val = "x";
alert('external: ' + Html.val);
Html();
但它不起作用。为什么?如何让函数代码在创建后查看设置的值

-更新-


因为我最初的帖子的意图不太清楚,而且因为我发布了一个比其他帖子更接近意图的解决方案,请允许我说,我想要的是一种访问函数内部成员的机制,其明确目的是能够创建一个通用函数,该函数可以在以后独立地修改其行为功能。您可以使用
call
显式传递上下文:

var Html = function() {
  alert('internal: ' + this.val);
};
Html.call({ val:'x' });
如果要将函数用作构造函数,可以使用
new
实例化:

function Html(val) {
  this.val = val;
}

var html = new Html('x'); // Must be used with `new`
alert('internal: '+ html.val);
如果要扩展对象,可以向原型添加方法:

Html.prototype.getVal = function() {
  return 'internal: '+ this.val;
};

var html = new Html('x');
alert(html.getVal());
在Javascript中,“this”是与方法关联的对象,而不是方法本身。最简单的解决方案是将Html函数更改为方法:

var html = {
  val: "x",
  draw: function(){
    console.log('internal: ' + this.val);
  }
}

html.draw();
html.val = "y"
html.draw();
如果希望将html函数保持为直接函数,可以在方法周围创建一个包装器

var Htmldraw = function(){
    return html.draw();
}
html.val = "asd"
或者,您可以将函数更改为使用词汇范围的变量,而不是“this”


感谢你们两位花时间发布详细的答案。你们都得到了感谢分

我要回答我自己的问题,为了一些可怜的草皮,他们将来可能会为此而挣扎。。。我想做的最好的事情如下所示(请参阅我在原始帖子中的编辑,以澄清我的意图):


从中可以看出,可以从外部访问my函数的内部变量。这使我能够制作一个函数,然后加载一组数据供其使用,而不必在创建过程中传递参数(这很有用,因为当函数实际被调用(而不是创建时),它将收到一组不同的参数)

如前所述;您将函数用作对象的构造函数,但没有使用它创建对象
var h=new Html()
有关构造函数、原型、继承和重写的详细信息,请参见:
var val;
var Html = function() {
    console.log('internal: ' + val);
};
val = "x";
alert('external: ' + val);
Html();
function fn() {
    this.val = "x";
    this.show = function() {
        alert("internal = " + this.val);
    };
    return this;
};

var x = fn();
alert("initial = " + x.val);
x.val = "y";
alert("reset = " + x.val);
x.show();