对js对象原型的测试:
<html> <head> <title> 了解prototype </title> <script type="text/javascript"> function baseClass(){ //对象方法 this.showMsg=function(){ console.log("baseClass::showMsg"); } } function extendClass(){ //对象方法 this.upd=function(){ console.log("this.upd"); } } extendClass.prototype=new baseClass(); //克隆base到extendClass,此时extendClass已经含有方法showMsg extendClass.prototype.updFun=function(){ console.log("updFun is called"); } //在extendClass添加原型方法updFun,和在extendClass加一个此方法一样,主要区别是这样可以添加方法,而不修改原本的类,而且这个又可以当成类方法,可以直接调用 //类方法 extendClass.updClass=function(args){ console.log("updClass"); } //原型方法,但对应的是一个json,当extendClass初始化的时候,会调用baseas的匿名方法 extendClass.prototype.updd={ baseas:(function(args){ //args即是window console.log("has in based"); console.log(args); })(window), //非匿名方法,不会主动调用,如何调用还不知道 base2:function(args){ console.log("has in badsed2222"); console.log(args); } } var instance=new extendClass(); extendClass.prototype.updFun(); //不能写成instance.updClass,对象上没有该方法,和原型方法区别比较明显 extendClass.updClass(); //调用对象方法 instance.showMsg(); //调用原型方法,和extendClass.prototype.updFun()一样 instance.updFun(); //调用upd方法 instance[‘upd‘].call(); //如果有xbig,则使用,否则就是{} var xbig= xbig||{}; console.log("xbig:"+JSON.stringify(xbig)); //xbig:{} //给xbig的ins赋值json串,fb对应的是方法 xbig.ins={fa:"1",fb:function(){ console.log("fb"); }} xbig.ins.module= {upd:function(args){ //call的第一个参数为this,第二个参数是args,在这个方法内部,可以操作this,如果是一个节点,则可以修改节点的值 console.log(this); console.log("I`d like to do"); console.log("args:"+args); }}; xbig.ins.module[‘upd‘].call({a:1},"somesthing1"); var xbig2= xbig||{}; console.log("xbig2:"+JSON.stringify(xbig2)); //xbig2:{"ins":{"fa":"1","module":{}}} xbig2.ins.module[‘upd‘].call(instance,"somesthing2"); </script> </head> <body> <h1>prototype到底是什么意思1</h1> </body> </html>
时间: 2024-10-13 17:58:45