首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

javascript之prototype、proto_跟constructor

2012-10-26 
javascript之prototype、__proto__和constructor一、prototype原型确切地说Javascript的“类”在严格意义上来

javascript之prototype、__proto__和constructor

一、prototype原型

确切地说Javascript的“类”在严格意义上来讲并不能算真正的类,从其声明的对象到类(估切这么说)有这样一个关系:
Instance.__proto__=InstanceClass.prototype(ie不支持)

以上说明:实例的属性(__proto__)等于的prototpye,我们可以看出,实例的"__proto__"正好巧接在的"prototype"上,通过原型链(prototype)来查找其方法并扩展,我们会发现其方法(Method)与其属性(Property)都是Public(当然你也可以用Private,即不用this),而prototype其实就是一对象,用来记录方法做为一个集合
假设我们声明一个类A,可以如此?

由于Javascrīpt并没有在系统内部并未使用过“继承”(很大可能),所以class下的prototype得到的全是 
顶层Object,后期在继承的时候,我们可以看到这样的一个式子:
child.prototype=new parent();
继承两字带引号的意思是说就算有继承也并非真正意义上的继承,也只是通过prototype巧接得到。
用实例扩展一个方法到类,这儿不得不提及__proto__这个属性

?

function abc(){     var owner=this;     owner.k="pp";     owner.abc=function(){         //    } } abc.prototype.def=function(){     //} var s=new abc(); for(var t in abc.prototype){     alert("prototype指向:"+t+"="+abc.prototype[t]); } for(var t in s.__proto__){     alert("__proto__指向:"+t+"="+s.__proto__[t]); }

?在ff下我看可以看到实例名.__proto__=类.prototype,现在通过实例扩展一个方法,这儿在实际应用当中并不推荐这样做,下例:
s.__proto__.hjk=function(){
return "hjk";
}
alert(s.hjk());
for(var t in abc.prototype){
alert("prototype指向:"+t+"="+abc.prototype[t]);
}
这下应该明白了吧。

?

引自:http://www.jb51.net/article/4318.htm

热点排行
Bad Request.