先解释一下原型。每个javascript对象都和另个都行有关联。“另一个”对象就是我们熟知的原型,每一个对象都从原型继承属性。
要理解原型我想应该先把对象理解清楚。
对象
他是javascript的基本数据类型。也可以看做是一个属性的无序集合,每个属性都有一个名/值对。对象的方法通常是继承的属性,这种原型式的继承javasript的核心特征。
每个对象拥有三个相关的对象特性。
对象的创建可以通过对象直接量,关键字new和object.create()函数三种方法来创建。
对象直接量
1 var empty={}; //没有任何属性的对象 2 var point={m:0,n:0}; //两个属性 3 var point2={m:point.m,n:point.n+1};//更复杂的属性 4 var book={ 5 "main title":"javascript", //属性名字里有空格,必须用字符串标示 6 "sub-title":"the definitive guide",//连字符也是要用字符串标示 7 "for":"all audiences", //for是保留字,因此必须用引号 8 author:{ //这个属性的值是一个对象 9 firstname:"david"; //注意这里的属性名都没有引号 10 surname:"flanagan" 11 } 12 };
通过关键字new
1 var a=new Array(); //创建一个空数组 2 var d=new Date(); //创建一个表示当前时间的Date对象 3 var r=new RegExp(“js”); //创建一个可以进行模式匹配的RegExp对象
通过object.create()创建
它是一个静态函数,而不是提供给某个对象调用的方法。使用他的方法很简单,只需要传入所需的原型对象即可:
1 var 01=Object.create({x:1,y:2}); //01继承了属性x和y
2 var 02=Object.create(null); //02不继承任何属性和方法
如果想创建一个普通的空对象,需要传入Object.prototype
3 var 03=Object.create(Object.prototype); //03和new Object()一样
接下来我们通过原型继承创建一个新对象
//inherit()返回了一个继承自原型对象P的属性的新对象
function inherit(p){
if(p==null) throw TypeError(); // p是一个对象,但是不能为空
if(Object.create) //如果Object.create()存在
return Object.create(p); //直接使用它
var t=typeof p; //否则进一步检测
if (t!=="object" && t!=="function") throw TypeError();
function f(){}; //定义一个空的构造函数
f.prototype=p; //将其原型属性设置为P
return new f(); //使用f()创建p的继承对象
}
原文:http://www.cnblogs.com/lidongcn/p/4532870.html