1. 程式人生 > >js物件建構函式用法

js物件建構函式用法

如何寫一個js物件建構函式,首先得明白prototypenew這兩個是什麼意思,做啥的。prototype 屬性使你有能力向物件新增屬性和方法;而new是建立object + this指向object + __proto__指向,具體的解釋可以點開網頁看。

    <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>
如果想了解更多的的js物件封裝的方法,大家可以看這篇部落格,針對部落格後面寫的類jQuery 封裝的js程式碼,我自己的理解
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()