javascript - 库设计 - 原型方法的返回值未定义,除非使用绑定
问题描述
我想知道为什么这个对象需要绑定到返回对象才能使这个方法起作用。
function person( _name ) {
function InnerPerson( _name ) {
this.name = _name;
}
InnerPerson.prototype = {
me: function() {
return "Hi, my name is " + this.name;
}
};
var innerPerson = new InnerPerson( _name );
return {
me: innerPerson.me // this only works if you add .bind( innerPerson )
};
}
var josh= person("josh");
console.log( josh.me() ); // Hi, my name is undefined
在这个执行过程中,一步一步发生了什么?如果对象已明确创建并且对象的返回值在其中引用了它,那么在调用时如何this.name
未定义?为什么在这个例子中需要?josh.me()
person
me: innerPerson.me
bind
对此进行解释的部分原因不仅仅是this
Javascript 中的工作方式或上下文。在这个问题中发生了一些具体的事情,this
一般意义上的理解并不能完全解释。例如,如果我调用innerPerson.me()
而不是返回函数定义,我会得到正确的上下文。正是因为我返回的内容和this
变化。
解决方案
您必须了解这是如何工作的。您想要实现的目标可以是取一个thisParent
并在其内部使用InnerPerson
它prototype
。
function person(_name) {
var thisParent = this;
function InnerPerson(_name) {
thisParent.name = _name;
}
InnerPerson.prototype = {
me: function() {
return "Hi, my name is " + thisParent.name;
}
};
var innerPerson = new InnerPerson(_name);
return {
me: innerPerson.me // this only works if you add .bind( innerPerson )
};
}
var josh = person("josh");
console.log(josh.me());
推荐阅读
- google-bigquery - 来自以太坊的 BigQuery 数据中可用的指标
- javascript - 错误时的javascript axios控制台日志响应
- java - 没有可用的“com.milkdairy.dao.userRepository”类型的合格 bean:预计至少有 1 个有资格作为自动装配候选者的 bean
- macros - 从 Enter 确认 Atom 解除绑定更正
- python - 为什么 Python XLSWRITER 单元格公式不能以编程方式工作?
- linux-kernel - 将 writecombine 区域映射到用户空间文档
- javascript - 输入框通过单击按钮来提醒文本(对 JQuery 来说真的很新)
- sql-server - 在 SQL Server 中解析 XML(使用数组)
- bash - 在 WSL Ubuntu 上克隆时,Bash github 项目无法运行
- ruby - 如何在wix api网站上的ruby on rails应用程序上的api调用帖子中获取身份验证代码?