JavaScript 原型模式

1. 普通对象

var o1 = {}
var o2 = new Object()
var o3 = new f1()

除了函数对象就是普通对象

2. 函数对象

function f1(){}
var f2 = function(){}
var f3 = new Function()

函数对象本质上都是通过new Function()创造的

JavaScript内置有12个构造器/对象Number、Boolean、String、Object、Function、Array、RegExp、Error、Date、Global、Arguments、Math、JSON

Number、Boolean、String、Object、Function、Array、RegExp、Error、Date、Global、Arguments、Math、JSON

Global不能直接访问,Arguments仅在函数调用时由JS引擎创建,Math,JSON是以对象形式存在 
的,无需new。它们的proto是Object.prototype

Inner.__proto__ === Function.prototype
Inner.constructor == Function

所有函数对象的__proto__都指向Function.prototype,它是一个空函数(Empty function)

f(){[native code]}

3. 构造函数

function Person(name, age, job) {
 this.name = name;
 this.age = age;
 this.job = job;
 this.sayName = function() { alert(this.name) } 
}
var p1 = new Person('Zaxlct', 28, 'Software Engineer');
var p2 = new Person('Mick', 23, 'Doctor');

 p1、p2都是构造函数Person的实例,p1、p2的constructor属性指向构造函数Person

4. 原型对象

每个对象都有__proto__属性,但只有函数对象才有prototype属性

// 构造函数
function Person() {}
Person.prototype.name = 'Zaxlct';
Person.prototype.age  = 28;
Person.prototype.job  = 'Software Engineer';
Person.prototype.sayName = function() {
  alert(this.name);
}

// 原型对象
Person.prototype = {
    name:  'Zaxlct',
    age: 28,
    job: 'Software Engineer',
    sayName: function() {
    alert(this.name);
    }
}

原型对象是一个普通对象,Person.prototype就是原型对象

var A = new Person();
Person.prototype = A;

原型对象(Person.prototype)是构造函数(Person)的一个实例

5. __proto__

JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__ 的内置属性,用于指向创建它的构造函数的原型对象

扫描二维码关注公众号,回复: 970614 查看本文章
person1.__proto__ == Person.prototype

6. 构造器

构造函数(Object)本身就是一个函数(就是上面说的函数对象),它和上面的构造函数 Person 差不多。只不过该函数是出于创建新对象的目的而定义的。

7. 原型链

person1.__proto__ = Pserson.prototype
Person.__proto__ = Function.prototype
Person.prototype.__proto__ = Object.prototype
Object.__proto__ = Function.prototype
Object.prototype.__proto__ = null

8. prototype

Function.prototype是唯一一个typeof XXX.prototype为function的prototype,其它的构造器的prototype都是一个对象。

实例和原型对象存在一个连接,这个连接存在于实例与构造函数的原型对象之间,而不是存在于实与构造函数之间。

“骄傲”两个字我有点怀疑。凡是有点干劲的,有点能力的,他总是相信自己,是有点主见的人。越有主见的人,越有自信。这个并不坏。真是有点骄傲,如果放到适当岗位,他自己就会谦虚起来,要不然他就混不下去。——邓小平 

猜你喜欢

转载自my.oschina.net/u/3703858/blog/1816264