js物件建構函式用法
阿新 • • 發佈:2019-02-05
如何寫一個js物件建構函式,首先得明白prototype和new這兩個是什麼意思,做啥的。prototype 屬性使你有能力向物件新增屬性和方法;而new是建立object + this指向object + __proto__指向,具體的解釋可以點開網頁看。
如果想了解更多的的js物件封裝的方法,大家可以看這篇部落格,針對部落格後面寫的類jQuery 封裝的js程式碼,我自己的理解<script> var Test = function () { //私有屬性 var prititle; //這裡還可以加上點其他方法或者變數,因為用立即函式封裝,test方法只能內部使用,即Test方法內可以使用,但外部無法使用,即var aaa=new Test(data);aaa.test()呼叫不到。 //這麼做的目的是因為某些屬性和方法是暴露供外部使用,某些屬性和方法是不暴露,只供內部使用,簡而言之就是private和public的識別 function prialert() {//私有方法 alert("私有方法"+prititle); } //建構函式 function test(title) {//由於執行new Test("哈哈"),相當執行test("哈哈") //給私有屬性賦值 prititle = title; //給公有屬性賦值 this.pubtitle=title;//this指向test(),由於函式最後return test,所以也可說指向於Test } //公有方法 test.prototype.pubalert = function () { //內部方法可以呼叫私有屬性或這私有方法 alert("私有屬性"+prititle); prialert(); }; //返回建構函式 return test;//相當於test()=Test(); }();//js要實現private和public就是通過立即執行函式(閉包)實現的 var aaa=new Test("哈哈"); aaa.pubalert(); //公用方法,可呼叫 alert(aaa.prititle);//私有屬性,呼叫不到 aaa.prialert();//私有方法,呼叫不到 </script>
var Person = (function(window) { var Person = function(name) { return new Person.fn.init(name);//new個物件初始化 } Person.fn = Person.prototype = { constructor: Person, init: function(name) { this.name = name; this.sayHello = function() { this.makeArray();//this指向init函式,相當於init.makeArray(); } }, makeArray: function() { console.log(this.name); } } /*雖然把makeArray 等常用方法掛載到 Person.prorotype 下面,但還是會被 init 這個例項使用. 執行這行程式碼後,init.prototype就會具有makeArray的方法,int就可以呼叫makeArray方法,否則就會報錯. 大家可以試著去掉Person.fn.init.prototype = Person.fn程式碼看看會怎麼樣 */ Person.fn.init.prototype = Person.fn; return Person; })();//閉包函式 var p = Person('pawn');//無需 new console.log(p);//返回int()物件 p.sayHello();//執行int.sayHello()