面向对象编程

根据 WikiPedia 的资料,面向对象编程最早的在 MIT 1960年的论文《LISP I Programmer Manual 》中:

Each of these atomic symbols has an association list* associated with it, and in fact the atomic symbol on the list of atomic symbols points to the location of the association list.
Note: In the local M.I.T patois, association list are also referred to as "property lists", and atomic symbols are sometimes called "objects"

可以看到,在1960年,M.I.T 的某个小组里就有了类似面向对象的定义:“每个原子粒度的 'Symbol' 都有一个相关列表对应这个它, 实际上原子粒度'Symbol' 都指向与之对应的相关列表的地址”

“注:在 MIT 内部环境里,相关列表也被称为 '属性列表',原子粒度Symbol
也被称作' Object 对象 '”

Javascript 的面向对象

最早的面向对象定义包含了两个要点:1. 属性列表;2. 列表对应的Symbol;

联系到今天 JavaScript 以及其他的面向对象语言,面向对象结构仍然是与1960年的定义类似的:成员属性+成员函数,对应一个对象

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

let alice = new Person('alice', 23, 'front-end');

for(key in alice) {
  console.log(key+':'+alice[key]);
}
/* 
"name"
"age"
"job"
"myName" 
*/

上述对象Person有的属性列表有四个,四个属性列表以及其对应的值组成一个Person对象。

但是在JavaScript中,对象是基于原型来实现的。alicePerson原型的一个实例,而 Person是基于Function的一个实例,因此也可以用原型的方式来实现面向对象编程,创建对象。

function People() {
}

People.prototype.name = 'alice';
People.prototype.age = 22;
People.prototype.job = 'front end';
People.prototype.myName = function() {
  console.log(this.name);
};

let person_one = new People();
let person_two = new People();
person_one.myName();
person_two.myName();

console.log(person_one.myName === person_two.myName);

你可能感兴趣的:(面向对象编程)