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

Access members within function/setting them from outside

本文关键字:成员 设置 从外部 功能 访问      更新时间:2023-09-26

我真的很想这样做:

var Html = function() {
    alert('internal: ' + this.val);
};
Html.val = "x";
alert('external: ' + Html.val);
Html();

但它不起作用。为什么?如何让函数代码在创建后查看设置的值?

-更新-

因为我最初的帖子的意图并不明确,而且我发布了一个比其他海报更接近意图的解决方案,请允许我说,我想要的是一种访问函数内部成员的机制,其明确目的是能够创建一个通用函数,该函数可以被播种以在以后独立地修改其行为

JavaScript函数的this上下文取决于如何调用该函数。您可以使用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);

如果你想扩展你的对象,你可以在prototype中添加方法:

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"

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();

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