繁体   English   中英

在控制台中打印对象时输出未定义

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM