首页 > 代码库 > 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之初理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。