|
javaScript的类型和原型之间是什么关系呢?刚看的时候真的有些迷糊。
到现在为止我还没有一本关于JavaScript的参考书,全是电子版的,找到了一本JavaScript王者归来,却只有一点五兆。就几章!!今天有兴趣又下载了几本电子书,却都是pdg格式,没这个软件,看不了,郁闷啊!
我会尽快买一本的,计算机的书贵啊,有钱的话早就买了!!
因为一直没有一本书,现在看的都是电子版的,所以看到一些不大理解的概念也懒得返回去再看!!现在又看到了,就总结一下啦!
JavaScript的prototype,在JavaScript中是很重要的,一开始的时候书上说的真的是一头雾水,到最后说白了,就是Java里面的继承,如果你是一个java程序员,就简单的多啦!!不过还是有几点不一样的。
在JavaScript中没有具体的类
比如说要创建一个猫科动物,直接写函数就可以了!!
举个例子
要创建一个猫对象
然后再创建一个老虎对象
让老虎的对象以猫为原型来增加自己对象的属性,来使自己的属性和功能变的强大
这样做的目的也是对代码的重用,增加效率!
function Cat(color,name){
this.color = color;
this.name = name;
.......
}
Cat.prototype.showMe= function(){
alert("My color is "+this.color+" , and my name is "+this.name);
}
//我感觉这是构造函数,既然JavaScript中没有类,这个一定就是构造函数了
var oCat = new Cat();//这是实例化对象
function Tiger(color,name){
this.color = color;
this.name = name;
}
Tiger.prototype = new Cat();
var oTiger = new Tiger("yellow","king");
oTiger.showMe();
// output My color is yellow , and my name is king
这样就可以了
这是一个非常简单的例子,我写这些的目的是为了更好的理解,和加深对它们的记忆。
我感觉自我总结这个方法蛮有效的!大家都可以试试!
在Tiger的构造函数中并没有定义showMe这个方法,但是通过以Tiger.prototype = new Cat();这句代码解决了重写代码的问题,当然,这个方法很短,没必要,如果方法很长呢?复制,粘贴?这就影响效率了!!!这句代码的意思就是以Cat为原型创建Tiger类型,新类型具有原型的一切属性和方法。
如果在类型中有一个和原型一样的属性,那么新类型的属性值将会覆盖掉原型的值,但是原型的值并没有删掉或改变,只是在这个范围内被覆盖!!
新类型也可以通过prototype为自己添加新属性,由新类型创建的所有的对象将动态添加这个属性!还拿Tiger类来说吧
Tiger.prototype.weight = function (){
alert(this.weight);
}
oTiger.weight();//这个也是成立的!!
是不是和java中的继承非常像呢!是的,但是,prototype属性并不单为了继承,继承并不是他的核心!至于为什么?我正在研究!!!待续! |
|