先解释一下原型。每个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和y2 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的继承对象}
时间: 2024-10-17 23:50:00