首页 > 代码库 > prototype和constructor之初理解

prototype和constructor之初理解

  因为整理以前的笔记,发现了这两个东西,也算是我对他们最初的最幼稚的理解吧。

  乍一回忆,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的改变而改变。懒得写了,以后再写吧...

  

prototype和constructor之初理解