首页 > 代码库 > call和apply还有bind
call和apply还有bind
有图有真相
function myfun1(){ //这是私有属性 var private1 = "这是私有属性1"; var privateMethod = function(){ alert(private1); } //这是实例属性 this.publicvar = "这是实例属性1"; this.public1 = function(){ privateMethod(); }}//-//--------------//-//--------------------------------- var newfun1 = new myfun1();newfun1.public1(); //这是私有属性alert(newfun1.publicvar);//这是实例属性alert(newfun1.private1); // undefined newfun1.privateMethod(); //运行错误//--//--//---///------------------------------------------//--//--//---///-------------------执行1-------------------//--//--//---///------------------------------------------function myfun2(){}myfun2.staticvar = "这是静态属性2";myfun2.staticmethod = function(){ alert(myfun2.staticvar);}//--//--//---///------------------------------------------//--//--//---///-------------------执行2-------------------//--//--//---///------------------------------------------var newfun2 = new myfun2();//newfun2.staticmethod();//运行错误;alert(newfun2.staticvar);//undefined//------//-------------//-------------------------------//静态私有成员var myfun3 = (function(){ function privateProperty(){ } privateProperty.staticvar = "这是静态私有成员3"; privateProperty.staticmethod = function(){ alert(privateProperty.staticvar); } privateProperty.staticmethod(); return privateProperty})();alert(newfun3.staticvar);//这是静态私有成员3//---//--------//-----------------//-------------//静态类var funcount = 0;var myfun4 = new function(){ funcount++; this.printCount = function(){ alert(funcount); }}myfun4.printCount(); //输出1;myfun4.printCount(); //输出1;myfun4.prototype.amethod = function(){ alert("原型对象4");}//运行错误var newfun4 = new myfun4();newfun4.amethod();//------------------//---------------------------------//运行错误,说明myfun3创建并实例化之后就不能再为它添加方法,属性new myfun3.constructor().printCount();//如果你确实想实例化,这样也可以.//原型继承var myfun5 = function(){}myfun5.prototype.myfun5_extend = function(){ alert("这是原型继承的5");}var myfun5_sub = function(){}myfun5_sub.prototype = new myfun5();var newfun5 = new myfun5_sub();newfun5.myfun5_extend(); //这是原型继承的//调用继承var myfun6 = function(){ this.method_p = function(){ alert("这是调用继承的6"); }}var myfun6_sub = function(){ myfun6.call(this);}var newfun6 = new myfun6_sub();newfun6.method_p();//这是调用继承的//覆盖var myfun7 = function(){ this.method = function(){ alert("这是父对象方法7"); }}var myfun7_sub = function(){ this.method = function(){ alert("这是子对象方法8"); }}myfun7_sub.prototype = new myfun7();var newfun7 = new myfun7_sub();newfun7.method(); //这是子对象方法,父对象方法被覆盖了.//多态function myfun8(a, b){ var a = a; var b = b; if (typeof a == "number" && typeof b == "number") { alert(a * b); } else if (typeof a == "string" && typeof b == "string") { alert(a + b); } else { alert("输入错啦"); }}myfun8(3, 4); // 输出12;myfun8("hi,", "你好");//输出hi,你好;myfun8("hi", 5);//输入错啦.
call和apply还有bind
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。