當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
javascript面向对象5
生活随笔
收集整理的這篇文章主要介紹了
javascript面向对象5
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
類變量/類方法/實例變量/實例方法 ?????? 在js中,所有的方法都有一個call方法和apply方法,這兩個方法可以模擬對象調用方法。它的第一個參數是對象,后面的參數表示對象調用這個方法時的參數。比如,我們定義了一個方法f(),然后調用下面的語句: ?????? f.call(0,1,2); ?????? 作用相當于: ?????? o.m = f; ?????? o.m(1,2); ?????? delete o.m; ?????? 舉個例子: ?????? JS代碼:(見附件test1.html) ?????? //定義方法 ?????? function Person(name,age){ ????????????? this.name = name; ????????????? this.age = age; ?????? }
?
?????? //空對象 ?????? var o = new Object(); ?????? //undefined_undefined ?????? alert(o.name + "_" + o.age);?
?????? //相當于調用o.person("wangsy",31); ?????? Person.call(o,"wangsy",31); ?????? //wangsy_31 ?????? alert(o.name + "_" + o.age); ?????? //apply方法作用同call,不同之處在于傳遞參數的形式是用數組來傳遞 ?????? Person.apply(o,["wangsy",31]); ?????? //wangsy_31 ?????? alert(o.name + "_" + o.age);?
?????? 實例變量和實例方法都是通過實例對象加”.”操作符然后跟上屬性名或方法來訪問的,但是我們也可以為類來設置方法或變量。這樣就可以直接用類名加”.”操作符然后跟上屬性名或方法來訪問。定義類屬性和類方法很簡單。 ?????? JS代碼:(見附件test2.html) ?????? //定義類變量,創建的Person實例的個數 ?????? Person.counter = 0; ?????? //定義方法 ?????? function Person(name,age){ ????????????? this.name = name; ????????????? this.age = age; ????????????? //每創建一個實例,類變量加1 ????????????? Person.counter++; ?????? }?
?????? //類方法,判斷誰的年齡較大 ?????? Person.whoIsOlder = function(p1,p2){ ????????????? if (p1.age > p2.age) ????????????? { ???????????????????? return p1; ????????????? }else{ ???????????????????? return p2; ????????????? } ?????? }?
?????? var p1 = new Person("p1",18); ?????? var p2 = new Person("p2",22); ?????? //現在有2個人 ?????? alert("現在有" + Person.counter + "個人"); ?????? var p = Person.whoIsOlder(p1,p2); ?????? alert(p.name + "的年齡較大");?
prototype屬性的應用: ?????? 假設定義了一個Circle類,有一個radisu屬性和area方法,實現如下: ?????? JS代碼:(見附件test3.html) ?????? ?????? function Circle(radius){ ????????????? this.radius = radius; ????????????? this.area = function(){ ???????????????????? return 3.14 * this.radius * this.radius; ????????????? } ?????? }?
?????? var c = new Circle(1); ?????? //3.14 ?????? alert(c.area());?
?????? 假設我們定義了100個Circle類的實例對象,那么每個實例對象都有一個radius屬性和area方法,實際上除了radius屬性,每個Circle類的實例對象的area方法都是一樣的,可以把area方法抽出來定義在Circle類的prototype屬性中,這樣所有的實例對象就可以調用這個方法,從而節省空間。 ?????? JS代碼:(見附件test4.html) ?????? function Circle(radius){ ????????????? this.radius = radius; ?????? }?
?????? Circle.prototype.area = function(){ ????????????? return 3.14 * this.radius * this.radius; ?????? }?
?????? var c = new Circle(1); ?????? //3.14 ?????? alert(c.area());?
?????? 現在,我們用prototype屬性來模擬一下類的繼承:首先定義一個Circle類作為父類,然后定義了子類PositionCircle: ?????? JS代碼:(見附件test5.html) ?????? //定義父類Circle ?????? function Circle(radius){ ????????????? this.radius = radius; ?????? }?
?????? Circle.prototype.area = function(){ ????????????? //定義父類的方法area計算面積 ????????????? return 3.14 * this.radius * this.radius; ?????? }?
?????? //定義PositionCircle類 ?????? function PositionCircle(x,y,radius){ ????????????? //屬性橫坐標 ????????????? this.x = x; ????????????? //屬性縱坐標 ????????????? this.y = y; ????????????? //調用父類的方法,相當于調用this.Circle(radius) ????????????? //設置PositionCircle類的radius屬性 ????????????? Circle.call(this,radius); ?????? } ?????? //設置PositionCircle的父類為Circle類 ?????? PositionCircle.prototype = new Circle();?
?????? var pc = new PositionCircle(1,2,1); ?????? //1 ?????? alert(pc.radius); ?????? //Circle ?????? alert(pc.constructor);?
?????? PositionCircle.prototype.constructor = PositionCircle; ?????? //PositionCircle ?????? alert(pc.constructor);轉載于:https://blog.51cto.com/jawsy/167226
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的javascript面向对象5的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redhat linux配置RSH遇见的
- 下一篇: PCI_Express规范第七章解读-S