gpt4 book ai didi

Javascript 对象/原型(prototype)。我的理解错了吗

转载 作者:行者123 更新时间:2023-11-29 02:17:40 25 4
gpt4 key购买 nike

我一直在阅读有关 Javascript 类/对象/原型(prototype)的文章,并且来自 OOP 背景,所以我现在希望在 Javascript 中使用对象。

但是我觉得我误解了什么。例如,过去在 VB.net 中使用对象时,您创建了对象并能够使用数据类填充它。

但是在 javascript 的土地上,由于这个异步的事情,事情并没有按照我期望的方式执行。

所以我如下创建我的原型(prototype)并调用适当的函数,但该函数说它已经完成(但没有因为它没有收到正在发生的 $.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 将我个人的名字返回到控制台,但为时已晚,我无法使用它。

我是否以错误的方式使用了原型(prototype)?

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

或者我完全错了。

我想以这种方式使用它的原因是它似乎比 php 对象更好。

我应该改用 PHP 对象吗?

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

最佳答案

您遗漏了一件事,即使用 $.post 的 http 调用是异步的,它不是阻塞调用。为了从 getPerson() 方法中取回值,您必须在该函数中传递一个 callback(或函数) 以取回结果,但不推荐这样做方法 。您可以阅读有关 promise 的信息并使用它们,因为它们很棒。但是,使用回调,您可以执行类似的操作。

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);

关于Javascript 对象/原型(prototype)。我的理解错了吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37093742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com