我问了一个小时的问题并弄明白了,然后出现了另一个问题..我正在找回函数的签名而不是传递给它的字符串。但是,如果我向该函数添加一个console.log,它会向我显示该对象..
以下是我正在使用的代码
var UsableObjects = {
Person: function (a, b) {
var self = this;
var person = {
FirstName: a,
LastName: b
};
self.ShowMyPerson(person);
},
ShowMyPerson: function (mystring) {
console.log(mystring);
return mystring;
}
}
我将值传递给Person,就像这样
UsableObjects.Person("Joe", "Smith");
多数人工作,但是当我调用ShowMyPerson时,我在控制台中看到了这个对象,它看起来像这样
Object {FirstName: "Joe", LastName: "Smith"}
但是当我这样称呼它时
var abc = UsableObjects.ShowMyPerson;
console.log(abc);
我得到了这个
function (mystring) {
console.log(mystring);
return mystring;
}
如果我试试这个
console.log(abc.FirstName);
我在控制台中得到一个未定义的内容..
我期待得到的是这个......
{FirstName: "Joe", LastName: "Smith"}
所以问题是,为什么我没有得到预期的结果?
答案 0 :(得分:3)
写作时
var abc = UsableObjects.ShowMyPerson;
你没有调用ShowMyPerson函数,你只是让你的变量abc来引用那个函数。
要调用它,您需要在函数名后面使用(),例如
var abc = UsableObjects.ShowMyPerson();
另请注意,您的函数需要参数作为参数,因此也要传递参数。
例如
var abc = UsableObjects.ShowMyPerson({FirstName: "Joe", LastName: "Smith"});
函数ShowMyPerson返回作为参数传递给它的任何内容,因此在这种情况下,abc现在将是一个具有键FirstName和LastName的对象
现在您可以以
的形式访问这些值abc.FirstName
以下是您的要求的工作示例
https://jsfiddle.net/f875c7t5/1/
var UsableObjects = {
Person: function (a, b) {
var self = this;
var person = {
FirstName: a,
LastName: b
};
self.ShowMyPerson=person;
return this;
},
ShowMyPerson:''
}
var abc = UsableObjects.Person("d","f");
console.log(abc.ShowMyPerson.FirstName);
答案 1 :(得分:0)
您没有将<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="ie7.css">
<![endif]-->
称为方法,而是尝试将其作为属性进行访问。调用方法的正确方法(注意它接受参数)将是
ShowMyPerson
UsableObjects.ShowMyPerson({FirstName: 'Joe', LastName: 'Smith'})
var UsableObjects = {
Person: function (a, b) {
var self = this;
var person = {
FirstName: a,
LastName: b
};
self.ShowMyPerson(person);
},
ShowMyPerson: function (mystring) {
console.log(mystring);
return mystring;
}
}
function callMe()
{
var abc = UsableObjects.ShowMyPerson({FirstName: 'Joe', LastName: 'Smith'});
document.getElementById("result").innerHTML = abc.FirstName;
}