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

帮忙看看这个prototype的有关问题

2012-09-22 
帮忙看看这个prototype的问题JScript code(function(){function NavgationUtility(){this.init()}Navgati

帮忙看看这个prototype的问题

JScript code
(function(){    function NavgationUtility()    {        this.init();    }        NavgationUtility.prototype =     {        Init:function(id)        {            this.id = id;                   },        getPathContent:function(navid,oContent)        {            return this._getPathContent(navid) + oContent;        },        _getPathContent:function(navid)        {            var item =  $("#"+this.id+"_"+navid);            var ret = "";            if(item.length>0)            {              var parentId = item.attr("parentId");              ret +=  this.getPathContent(parentId);              ret +="<a href='"+ item.attr("href")+"'>"+ item.html() + "</a>" + ">>";            }            return ret.replace("undefined","");        },        getId:function()        {            return this.id;        }    }    debugger    window.nav = NavgationUtility;})();


我用的是asp.net 调用的时候很无语,prototype 应该是保留字.window.nav.prototype.getPathContent(xxxxx);
但是我调试发现我非得这样调用 我检查了下 是我哪里错了么??


[解决办法]
原来如此,

那是因为window.nav = NavgationUtility;这个代码只是说把NavgationUtility赋值给window的属性nav
而NavgationUtility并非是object
它是function
所以function不能通过window.nav.getPathConten(xxxx)这样访问了

正确写法就是window.nav = new NavgationUtility();
实例化这个玩意,你可以调试的时候typeof函数alert(typeof(window.nav))看看就知道了
[解决办法]
prototype一般用于类扩展成员,其成员可以通过两种方式访问到:
1.按照赋值时的方式直接调用,因为prototype本身实际也是一个对象
你这儿就是window.nav.prototype.getPathContent(xxxxx);但这样的话函数内this指向是window.nav.prototype,一般不这样用,就算要用也是这样window.nav.prototype.getPathContent.call(obj,par);//obj表示调用对象,par表示参数
2.构造对象访问,这是正常的用法
var obj=new window.nav();
obj.getPathContent(xxxxx);//此时函数内this指向obj

热点排行