函数返回签名但不返回字符串

时间:2016-12-20 05:32:14

标签: javascript

我问了一个小时的问题并弄明白了,然后出现了另一个问题..我正在找回函数的签名而不是传递给它的字符串。但是,如果我向该函数添加一个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"}

所以问题是,为什么我没有得到预期的结果?

2 个答案:

答案 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;
}