我在向对象添加包含this
的函数时遇到问题。它产生了我没想到的结果,这让我有些困惑。我尝试使用Object.create()
重写代码并且只是抛出一个错误。我肯定会忽略一些简单的事情。如何确保qaz.execute
隐式绑定到qaz
?谢谢你的帮助。
// Version 1:
var qaz = {}; // [[Prototype]] will point to Object.prototype.
qaz.execute = function(){ console.log( "qaz: " + this ) };
qaz.execute(); // qaz: [object Object] (Why not qaz or even global/undefined?)
// Version 2:
var qaz = Object.create(null); // [[Prototype]] will be null.
qaz.execute = function(){ console.log( "qaz: " + this ) };
qaz.execute(); // TypeError: can't convert this to primitive type (Why?)
答案 0 :(得分:0)
很难准确说出你想要完成的事情。我建议您查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this#this_on_the_object' s_prototype_chain
它应该让你更好地掌握this
我可以说,如果你想记录qaz究竟是什么,那就试试吧
var qaz = {};
qaz.execute = function(){ return this };
console.log("qaz: " + qaz.execute());
但是,它不打印" qaz",但我认为它会打印所有qaz的属性。
如果您想了解有关将内容输出到控制台的更多信息,请阅读此处
https://developer.mozilla.org/en-US/docs/Web/API/console#Outputting_text_to_the_console
答案 1 :(得分:0)
// Version 2:
var qaz = Object.create(null); // [[Prototype]] will be null.
qaz.execute = function(){ console.log( "qaz: " + this ) };
qaz.execute(); // TypeError: can't convert this to primitive type (Why?)
因为quz不从Object.prototype继承toString。您可以执行以下操作:
var qaz = Object.create(null); // [[Prototype]] will be null.
qaz.execute = function(){ console.log( "qaz: " +
Object.prototype.toString(this) ); };
qaz.execute();
或者如我和elclanrs的评论所述;根本不将对象转换为字符串并按原样记录对象(可能在IE中不起作用):
var qaz = Object.create(null); // [[Prototype]] will be null.
qaz.execute = function(){ console.log( "qaz: ", this); };
qaz.execute();