一、基本概念
函数 | 是对象 | 属性 | prototype属性:是指针,指向所有实例共享的属性和方法的对象,即原型对象 |
方法 | |||
Function类型的实例 | |||
函数名是指针 | 指向函数对象,不会与某个函数绑定 |
二、创建对象模式
例子 | 缺点 | 备注 | |
工厂模式 |
function createPerson(name,age,job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); }; return o; } | 没有解决对象识别的问题,即怎样知道一个对象的类型 | |
构造函数模式 |
function Person(name,age,job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }; } | 每个方法都要在每个实例上重新创建一遍 | |
function Person(name,age,job){ this.name = name; this.age = age; this.job = job; this.sayName = sayName; } function sayName(){ alert(this.name); } |
1.在全局作用域中定义的函数实际上只能被某个对象调用,全局作用域名不副实 2.没有封装性 | ||
原型模式 |
function Person(){ } Person.prototype.name = "a"; Person.prototype.age = 28; Person.prototype.job = "software"; Person.prototype.sayName = function(){ alert(this.name); }; | 原型中所有属性都是被很多实例共享的,这种共享对于函数非常合适。但是实例一般都是要有属于自己的全部属性的 | ![]() |
组合使用构造函数模式和原型模式 |
function Person(name,age,job){ this.name = name; this.age = age; this.job = job; } Person.prototype.sayName = function(){ alert(this.name); }; | 使用最广泛、认同度最高的一种创建自定义类型的方法 |