标签:
因为整理以前的笔记,发现了这两个东西,也算是我对他们最初的最幼稚的理解吧。
乍一回忆,prototype是为一个大的类增加行为用的,而这个行为实例们普遍都要用到;而constructor顾名思义是构造,构造函数?
先说说prototype,因为理解的很浅,感觉没啥好说的,直接上个例子:
1 function Person() { 2 this.age = 20; 3 this.name = ‘hello world‘; 4 } 5 6 Person.prototype.show = function() { 7 alert(this.name); 8 }; 9 10 var a = new Person(); 11 a.show();
第六行用到了prototype,直接为Person类增加了一个方法,具体的实例可以直接调用。
1 Object.prototype.show = function() { 2 console.log(‘hello world‘); 3 }; 4 var a = ‘1‘; 5 a.show(); 6 var b = 1; 7 b.show(); 8 var c = true; 9 c.show(); 10 var d = function() {}; 11 d.show(); 12 var e = new String(‘123‘); 13 e.show();
除了null和undefined之外其他的本地对象都继承自Object,所以在Object对象的prototype属性上定义的方法每个本地对象都能继承。
接着来看个具体的例子:
1 var Func = function() {}; 2 Func.prototype.age = 10; 3 var obj = new Func(); 4 Func.prototype = {age: 40}; 5 Func.prototype.age = 30; 6 var obj2 = new Func(); 7 console.log(obj.age); 8 Func.prototype.age = 20; 9 console.log(obj2.age);
答案是10和20。这里需要理解prototype的重新赋值,如果对prototype整个重新赋值的话,就是重新划分了一块内存储存这个新的原型,比如第四行,但是之前的实例都是引用到旧的原型上,这就是obj.age为什么一直是10的原因。而obj2.age的值随着Func.prototype.age的改变而改变。懒得写了,以后再写吧...
标签:
原文地址:http://www.cnblogs.com/bigbigsunrise/p/4207861.html