/* var obj=new Object();//建立一個對象 obj.name="兔子01";//給添加添加name屬性 obj.age="24";//給對象添加age屬性 obj.showName=function(){//給對象添加showName方法 alert("My Name is "+this.name); } obj.showAge=function(){//給對象添加showAge方法 alert("My Age is "+this.age); } obj.showName();//My Name is 兔子01 obj.showAge();//My Age is 24 */ /*問題??? 如果有很多個物件,如果按照上面的方法就要寫很多次了 */ /*OOP 面向對上面的進行封裝 1:工廠方式構造對象【原材料-->加工-->出廠(return)】 function Person(name,age) { //1、原材料 var obj=new Object(); //2、加工 obj.name=name; obj.age=age; obj.showName=function(){ alert(this.name);//this:當前的方法屬於誰【在函數前面有new的時候失效】 } obj.showAge=function(){ alert(this.age); } //3、出廠 return obj;//如果不返回,外面調用不到obj } var p1=Person("zhangsan01",12); var p2=Person("zhangsan02",13);*/ /* p1.showName(); p1.showAge();//zhangsan01-12 p2.showName(); p2.showAge();//zhangsan02-13 alert(p1.showName==p2.showName);//false */ /*問題??? 工廠方式缺點: 1、沒有new 2、每個對象都有自己的函數,浪費資源,【n個Person就要建立n個對象】 --因為var tuzi1=function{ alert("tuzi"); } <==>等價於 var tuzi2=new Function("tuzi"); //建立了2個對象,所以不相等 */ /*function Person(name,age) { //如果外部調用函數new的時候,系統內部自動建立對象???//var obj=new Object(); /* function testNew() { alert(this); //如果調用是:testNew(); //返回window //如果調用是:new testNew(); //返回是object } testNew(); new testNew(); this.name=name; this.age=age; this.showName=function(){ alert(this.name);//this:當前的方法屬於誰【在函數前面有new的時候失效】 } this.showAge=function(){ alert(this.age); } //如果外部調用函數new的時候,系統內部自動return //return obj;//如果不返回,外面調用不到obj } */ /* var per1=new Person('zs01','男'); var per2=new Person('zs02','女'); per1.showName();//zs01 per2.showName();//zs02 alert(per1.showName==per2.showName);//false 效率還是上面一模一樣 */ function Person(name,age) { this.name=name; this.age=age; } Person.prototype.showName=function(){ alert(this.name); } Person.prototype.showAge=function(){ alert(this.name); } /* var p1=new Person("tuzi01",100); var p2=new Person("tuzi02",200); p1.showName();//tuzi01 p2.showName();//tuzi02 alert(p1.showName==p2.showName);//true */ /* p1.showName==p2.showName-->true 我們通過原型解決了多個Person建立n個對象的資源問題 -->原型可以拓展系統對象,不會棄置站台,都是一個對象 */ /* 最後再示範原型一個例子,為string對象拓展一個去掉空格的方法,雖然IE9現在貌似已經有了trim() */String.prototype.MyTrim=function(){ return this.replace(/^\s+|\s+$/g,'');}var str=" 無妹子不編程 ";//首尾都有一個空格alert(str.length);//8alert(str.MyTrim().length);//6-->去掉了空格 </script>