-5

我查看了许多教程,但我仍在努力使用以下代码,有人可以解释一下这段代码。您能否解释一下每个部分是什么以及 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 = 
4

3 回答 3

2
function Person(name, age) { // define a _constructor_ called _Person_
    this.name = name;        // constructor sets instance property _name_
    this.age = age;          // constructor sets instance property _age_
} // when invoked with _new_, this creates an..
  // ..Object which is an instance of Person

var ageDifference = function (person1, person2) { // a function (expression)
    return person1.age - person2.age;  // which returns the difference.. 
}                                      // ..between _age_ properties

var alice = new Person("Alice", 30); // new instance of _Person_
var billy = new Person("Billy", 25); // another new instance
/* _alice_ now looks like    |    _billy_ now looks like
     {                       |      {
         age: 30,            |          age: 25,
         name: "Alice"       |          name: "Billy"
     }                       |      }
*/
// get the difference in age between alice and billy using our function
var diff = ageDifference(alice, billy); // passing the instances from above..
                                        // ..into the function expression
于 2013-07-17T12:55:56.710 回答
0

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

例如,而不是:

var ericName = 'Eric';
var ericAge = '22';

你可以这样做:

var eric = new Person('Eric', '22');

这将创建一个存储在变量中的 Person 对象eric。他的年龄将通过调用eric.name和来访问eric.age。面向对象的编程将拥有如此多的变量简化为只有几个变量和许多方法来访问和更改信息。

下一段:

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

实际上应该重写为:

function getAgeDifference(person1, person2) {
    return person1.age - person2.age;
}

要获得两个人之间的年龄差异,您可以调用getAgeDifference(alice, billy);. 这将调用getAgeDifference将使用它们的age属性为您提供更多信息的方法。

面向对象的语言,如 Java、C++、Objective-C,也使用类来帮助将相关代码的部分分隔到不同的类或文件中。这个类的概念非常有用,但很难理解,如果你想了解很多,我建议你买一本关于特定语言的书,并结合它提供的信息,让你了解如何写作面向对象的代码以及一些示例和指南,说明如何执行每个步骤。

祝你好运!

于 2013-07-17T13:07:28.507 回答
0

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

JavaScript 中的“new”关键字是什么?

所有 this.[variable] 设置器都将存储在该对象中。因此,当您调用函数中new Person的所有this分配时,将存储为一个对象,因此该对象(类似于地图)将具有键nameage分配的值。

所以爱丽丝会{ name : "Alice", age : 30 }和比利会{ name : "Billy", age : 25 }

原因 javascript 不键入检查你可以简单地做:ageDifference({age: 20},{age: 30});它仍然可以工作。这就是为什么 javascript 不是最好的面向对象语言的原因。

(您可以使用 typeScript 编写面向对象的 javascript:http ://www.typescriptlang.org/ )

于 2013-07-17T12:57:20.613 回答