不了解面向对象的编程

时间:2013-07-17 12:49:30

标签: javascript

我已经查看了一些教程,但我仍然在努力学习以下代码,有人可以解释一下这段代码。你能否解释一下每个部分是什么以及做什么。

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 = 

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

javascript不是编写面向对象的最佳语言。基本上了解您所执行的操作:使用object运算符创建新的new

What is the 'new' keyword in JavaScript?

所有这些。[变量] setter将存储在该对象中。因此,当您调用new Person时,函数中的所有this赋值都将存储为对象,因此此对象(类似于地图)将具有键name和{{1} }使用指定的值。

所以alice将是age,而billy将是{ name : "Alice", age : 30 }

因为javascript没有输入检查你可以简单地执行:{ name : "Billy", age : 25 }它仍然有效。这就是为什么javascript不是最好的面向对象语言。

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

答案 2 :(得分:0)

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

例如,而不是:

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

你可以这样做:

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

这将创建存储在变量eric中的Person对象。他的年龄可以通过拨打eric.nameeric.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,也使用有助于将相关代码的各个部分分成不同类或文件的类。这个课程的想法很有帮助,但很难理解,如果你想学习很多东西我会建议你拿一本关于特定语言的书,并提供它提供的信息,让你知道如何写面向对象的代码以及一些示例和指南,说明每一步的操作。

祝你好运!