[英]undefined output while printing object in console
假设我有一个带有属性和方法的对象。
当我this
对象分配给另一个对象时,我将执行以下代码。 它在控制台中打印对象obj1
时给了我未定义的未定义输出,任何人都可以在此帮助我,并向我解释这种行为。
谢谢。
var emp = { fname: "sachin", lname: "pawar", getname: function() { return this.fname + " " + this.lname; } }; var obj = emp.getname; var obj1 = obj(); var obj3 = emp.getname(); console.log(obj1);
问题是,当通过行称这在GetName方法是不确定的:
var obj1 = obj();
在JavaScript中, 这取决于调用函数的上下文。 所以,当你把它作为对EMP对象“点法” 这指的是它包含的对象。 当你把它称作“独立”它没有contect, 这是不确定的。
您可以绑定一个独立的调用以为其提供上下文,如下所示:
var obj=emp.getname.bind(emp);
var obj1=obj();
然后,在执行时将使用EMP得到了这个环境。
当您执行obj = emp.getname
,将复制其引用,并且在调用它时, obj.function()
和function()
有所不同。
当您执行obj.function
,将函数的this
设置为obj
,但是当您复制引用并对其进行调用时,由于没有对象与此调用关联,因此它将采用全局scope( window
)。 因此,它返回undefined
。
window.fname = "Foo"; window.lname = "Bar"; var emp = { fname: "sachin", lname: "pawar", getname: function() { return this.fname + " " + this.lname; } }; var obj = emp.getname; var obj1 = obj(); var obj3 = emp.getname(); console.log(obj1); console.log(obj3);
var emp = (function() { // private properties var fname = "sachin" var lname = "pawar" var getname = function() { return fname + " " + lname; } // Selected properties exposed return { getname: getname } })() var obj = emp.getname; var obj1 = obj(); var obj3 = emp.getname(); console.log(obj1); console.log(obj3);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.