Javascript对象/原型。我的理解是错的

时间:2016-05-07 21:08:55

标签: javascript jquery mysql prototype

我一直在阅读有关Javascript类/对象/原型的内容,并且来自OOP背景,因此我现在希望在Javascript中使用对象。

但我认为我误解了一些事情。例如,在VB.net中使用过去的对象时,您创建了对象并能够使用数据类填充它。

但是在javascript的土地上,由于这种异步的事情,事情不会以我期望的方式执行。

所以我按照下面创建我的原型并调用相应的函数,但函数说它已经完成了(但是因为它没有得到来自$ .post的响应,我的代码继续作为空值而我不得到我想要的信息。

<!DOCTYPE html>
<html>
<body>

    <button onclick="gogetperson()">Hello</button>
<p id="demo"></p>

<script>
    function Person() {
        this.firstName = '-';
        this.surname= '-';
        this.alias = 0;
    }
    Person.prototype.name = function() {
        return this.firstName + " " + this.surname
    };

    Person.prototype.getPerson = function(personid)
    {
        var query = $.param({personid: personid});
        var url = 'custom/person_get.php';

        $.post(url, query, function (response) {
            var obj = $.parseJSON(response);
            this.firstname= obj['rFirstName'];
            this.surname = obj['rLastName'];
            this.alias = obj['rAlias'];

            console.log(this.firstname);
        });

    }    

    function gogetperson() 
    {
        var myPerson = new Person();
        myPerson.getPerson(1)

        console.log(myPerson.firstName);

    }
</script>
    <script src="plugins/jQuery/jQuery-2.1.4.min.js"></script>

</body>
</html>

因此,当我的按钮运行gogetperson函数时,它完成但尚未获得数据。 $ .post部分中的console.log向我的人的名字返回控制台,但我来不及使用它。

我是否以错误的方式使用原型?

我希望能够在获取数据时使用javascript作为对象。

或者我完全错了。

我想以这种方式使用它的理由是它似乎是比php对象更好的选择。

我应该使用PHP对象吗?

我最终希望从mysql数据库中获取数据,并使用jquery和javascript轻松更改我的网页。

1 个答案:

答案 0 :(得分:2)

您缺少一件事,即使用$.post的http调用是异步的,并且它不是阻塞调用。为了从getPerson()方法获取值,您必须在该函数中传递callback ( or function)以获得结果,但这不是推荐的方法。你可以阅读有关承诺并使用它们因为它们很棒。 但是,使用回调,您可以执行类似的操作。

Person.prototype.getPerson = function(personid, cb)
{
    var query = $.param({personid: personid});
    var url = 'custom/person_get.php';

    $.post(url, query, function (response) {
        var obj = $.parseJSON(response);
        var person = new Person();
        person.firstname= obj['rFirstName'];
        person.surname = obj['rLastName'];
        person.alias = obj['rAlias'];

        console.log(person.firstname);
        cb(person);

    });

}

然后你可以称之为,

var myPerson = new Person();
function showPersonDetails(person){
     console.log(person.name())
}
myPerson.getPerson(1, showPersonDetails);