Javascript 不懂面向对象编程

Javascript 不懂面向对象编程,javascript,Javascript,我已经看过很多教程,但是我仍然在努力学习下面的代码,有人能解释一下这段代码吗。你能解释一下每个部分是什么以及oit的作用吗 function Person (name, age) { this.name = name; this.age = age; } var ageDifference = function(person1, person2) { return person1.age - person2.age; } var alice = new Person

我已经看过很多教程,但是我仍然在努力学习下面的代码,有人能解释一下这段代码吗。你能解释一下每个部分是什么以及oit的作用吗

function Person (name, age) {
    this.name = name;
    this.age = age;
}


var ageDifference = function(person1, person2) {
    return person1.age - person2.age;
}

var alice = new Person("Alice", 30);
var billy = new Person("Billy", 25);

// get the difference in age between alice and billy using our function
var diff = 

javascript并不是编写面向对象语言的最佳语言。基本上你要做的是:用新操作符创建一个新对象

所有this.[variable]setter将存储在该对象中。因此,当您调用new Person时,函数中的所有分配都将存储为一个对象,因此该对象类似于一个地图,具有键名称和年龄以及分配的值

爱丽丝将是{姓名:爱丽丝,年龄:30}比利将是{姓名:比利,年龄:25}

因为javascript不进行类型检查,您只需执行以下操作:年龄差异{age:20},{age:30};而且它仍然有效。这就是为什么javascript不是最好的面向对象语言


您可以使用typeScript编写面向对象的javascript:

此代码在顶部显示一个contsructor,用于通过提供参数name和age来创建Person对象。可以为该对象指定更多属性,例如头发颜色、高度、重量等。通过使用这些对象,您可以简单地将所有对象存储在一个数组或列表中,这将提供一个psuedo数据库,用于人口普查局跟踪人口。面向对象编程就是创建对象来存储数据,而不是主要依赖变量,变量前面有每个人的名字

例如,而不是:

var ericName = 'Eric';
var ericAge = '22';
你可以做:

var eric = new Person('Eric', '22');
这将创建一个存储在变量eric中的Person对象。可以通过调用eric.name和eric.age来访问他的年龄。面向对象编程将拥有如此多的变量简化为拥有少量和大量的方法来访问和更改它们的信息

下一部分:

var ageDifference = function(person1, person2) {
    return person1.age - person2.age;
}
实际上应改写为:

function getAgeDifference(person1, person2) {
    return person1.age - person2.age;
}
要获得两个人之间的年龄差异,您可以调用getAgeDifferencealice,billy;。这将调用getAgeDifference方法,该方法将使用其年龄属性为您提供更多信息

面向对象语言,如java、C++、Objto-C,也使用帮助将相关代码的部分分成不同类或文件的类。这个类的概念很有帮助,但很难理解。如果你想了解更多关于它的知识,我建议你读一本关于特定语言的书,并阅读它提供的信息,让你了解如何编写面向对象的代码,以及一些示例和指南,告诉你在这个过程中的每一步该怎么做


祝你好运

查看本教程并阅读第4.4点和第4.5点。这些应该已经解释了代码中发生了什么;最后。这对我来说不是很面向对象。这就是我要做的?我们创建了两个例子,alice和billy。通过调用ageDifference并将结果保存在全局diff变量中来完成第17行。这不是为了学究,但ageDifference只是一个函数,不是一种方法。你不是把对象作为参数传递给函数ageDifference,而不是把函数应用到对象吗?@InsertUserName这里好的,我将把这个词从apply改为apply,它可能有其他含义。回答这样的问题时,措辞总是很棘手,每个人都有话要说对于详细的分析,仍然是+1。实际上应该重写为为什么?这背后有什么道理吗?函数表达式有什么问题,特别是在下一步学习原型时,我学习了Java作为一种面向对象的语言,它主要使用特定的方法(访问器和变异器方法)与对象交互。虽然您可以将结果存储在变量中,但通常我不会,因为我会立即使用它,或者等待调用函数直到需要它。抱歉,我不明白您是否可以将结果存储在变量中。结果如何?函数被定义为一个引用为变量的表达式,函数表达式和函数声明之间的区别主要在于何时可以调用它们,如果是在定义之后,两者的作用几乎相同。另一个主要区别是,当您使用表达式时,可以直接将对象的属性指定为函数,而不是需要确保没有名称空间冲突和额外的声明赋值行
function getAgeDifference(person1, person2) {
    return person1.age - person2.age;
}