JavaScript 原型模式

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

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__ 的内置属性,用于指向创建它的构造函数的原型对象

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都是一个对象。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值