在OA上我被问到以下问题。我没弄清楚,我想知道这个问题的解决方案。
我被要求安慰Thank you for Logging in Dan
:
var Wrap = (function(){
function User(name){
this.name = name;
}
var d = function(){
console.log('1');
return "Thank you for Logging in" + this.name;
};
User.prototype.thankForLoggingln = d;
return User;
})();
我认为Wrap
会返回用户,这会使Wrap
等于User
。如果我执行Wrap('Dan')
,this.name
将更改为Dan
。
问题是,我无法访问thankForLoggingln
。我试过Wrap.()thankForLoggingln()
这样的事情,我得到了参考错误。有什么想法吗?
答案 0 :(得分:1)
/etc/init.d/arangodb3 start
表示使用User作为构造函数创建的用户对象继承`thankForLogging in。
所以
User.prototype.thankForLoggingln = d;
诀窍。应该有一个'1'的console.log立即引发它。
设置了两个附加陷阱:
console.log( new Wrap(" Dan").thankForLoggingln());
以小写字母L结尾,由'n'表示。将它拼写为'thankForLogginIn`进行调试。答案 1 :(得分:1)
您对
的理解我认为Wrap返回User,这使得Wrap等于 用户
是对的。但是当你说Wrap('Dan')
时,this
会引用Global对象。如果您在浏览器上运行此操作,则可以通过window.name
访问您的名称变量。您必须使用new
关键字调用该函数,以便创建一个新对象,this
将引用新创建的对象,User
将是它的构造函数。在这种情况下,它可以访问thankForLoggingln
函数。
所以正确的做法是
var user = new Wrap('Dan');
user.thankForLoggingln();
有关详细信息,请参阅constructor和You Don't Know JS
答案 2 :(得分:0)
您可以通过实例化 Wrap 来创建用户的实例:
var user = new Wrap('Dan');
使用该实例,您可以像这样调用 thankYouForLoggingIn 方法:
var message = user.thankYouForLoggingIn();
console.log(message);
因此,您的代码示例实际上只是创建类的一种奇特方式。
答案 3 :(得分:0)
尝试以下一定会有效。
Wrap.prototype.thankForLoggingln()
该函数立即被调用,在尝试Wrap之后它给了我这个输出。所以
ƒ User(name){ this.name = name; }
基本上它遵循使用prototype.So Wrap.prototype的干净继承,既提供方法也提供构造函数用户。使用new关键字或使用原型进行访问。 检查以下内容 Check the links for self invoking functions而且 About Prototypes