如何使“this”引用成员函数而不是其所有者类的实例
How can I make "this" refer to the member function and not the instance of its owner class?
function foo(name){
this.name = name;
this.bar = function() {
this.name = "John"
console.log("bar's name is " + this.name);
}
}
var blah = new foo("Peter");
console.log(blah.name);//"Peter"
blah.bar();//"bar's name is John"
console.log(blah.name);//"John"
在上面的例子中,我怎样才能在功能栏中使"this"引用bar,而不是它的所有者foo? 期望的结果将是:
var blah = new foo("Peter");
console.log(blah.name);//"Peter"
blah.bar();//"bar's name is John"
console.log(blah.name);//"Peter"
blah.bar();//"bar's name is John"
在这里,您只需调用函数栏,如果您希望bar成为它自己的对象(并且具有名称等属性(,则需要执行以下操作:var bar = new blah.bar();
这将创建您期望的输出。
您的示例看起来根本不想使用this
,而是一个不是任何属性的局部变量:
function Foo(name) {
this.name = name;
this.bar = function bar() {
var name = "John";
console.log("the name is " + name);
}
}
var blah = new Foo("Peter");
console.log(blah.name); // "Peter"
blah.bar();// "the name is John"
console.log(blah.name); // still "Peter"
请注意,函数的.name
(blah.bar.name
(是"bar"
的(至少在我的示例中,在您的代码中它是空的(,就像Foo.name
是"Foo"
一样,您甚至无法设置它。
相关文章:
- ES6构造函数返回基类的实例
- KnockoutJS-组件-多个实例
- 为什么无法在TypeScript中导出类实例
- 如何在GoogleWeb工具包(GWT)中从JSNI调用接口(实例化)
- fluxxor向一个flux实例添加一组以上的操作
- 使用jQuery获取Dropzone实例/对象
- "实例范围”;TypeScript类的getter/setter
- 如何在速度模板中获取LiferayPortlet实例id
- 同一项怎么可能在一个实例中未定义,却在另一个实例上定义
- 实例创建(JS)
- 显示模块模式在Knockout中设置模型的新实例
- 如何获取单选按钮的多个实例的选定单选按钮值
- 当同一浏览器的两个实例浏览时,Javascript页面如何具有唯一的ID
- 在哪里可以找到RXUI Javascript'时间飞逝'实例
- spine.js在启动时填充模型实例
- 不再需要时使用jQuery/kill实例
- 如何在用户输入时实例化数组
- 从Sequelize中的非实例更新
- 如何基于数组值创建新实例
- 如何使“this”引用成员函数而不是其所有者类的实例