访问功能内的成员/从外部设置成员
Access members within function/setting them from outside
我真的很想这样做:
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();
从中可以看到,我的函数内部的一个变量可以从外部访问。这使我能够制造一个函数,然后加载一组数据供其使用,而不必在创建过程中传递参数(这很有用,因为当实际调用(而不是创建)函数时,它将接收一组不同的参数)
相关文章:
- 如何设置html元素填充的动画
- 对象'未设置的数据成员值
- Knockout JS未将所有成员设置为可观察
- 在 Nodejs 中设置 Prototype 类的成员变量
- ie8 设置样式时找不到成员
- Javascript:尝试将函数设置为数组中对象的成员
- 特定成员组件的设置值
- 访问功能内的成员/从外部设置成员
- 路由加载时运行成员控制器函数以设置控制复选框的属性
- 将类中HTMLElement成员的onclick属性设置为同一类的方法
- 设置iframe's window.external成员通过javascript
- 无法设置未定义成员的属性
- 当为空时,设置JavaScript对象成员的默认值
- 从返回的承诺中设置成员变量
- 通过回调设置object的成员奇怪地失败了
- JavaScript如何从回调函数中设置成员变量
- 如何将事件侦听器回调设置为成员函数
- 将数组成员设置为 null 而不是 “”
- JQuery - 在对象列表中搜索将特定成员变量设置为值的对象
- 当从渲染助手设置时,把手模板不尊重视图成员