根据 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
中,对象是基于原型来实现的。alice
是Person
原型的一个实例,而 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);