再踐javascript對象、原型、屬性、建構函式、擴充、json

來源:互聯網
上載者:User
javascript中的對象有三種 1、內部對象 如Array、Boolean、Data、Math、Number、Object、RegExp、String對象等 這些對象系統給我們提供了各自的屬性與方法供調用。 2、基於類的對象 用類的方式實現對象的引用,這些類需要我們自己定義 3、基於原型的對象 提供有關如何使用 javascript 基於原型的物件模型的指南,並且提供指向特定資訊的連結,這些資訊描述基於原型的對象的自訂建構函式和繼承。/*javascript內建對象上添加其它屬性或者方法*/String.prototype.good=function(){//自訂方法     return "追加good方法"; } String.prototype.bad="追加bad屬性";//自訂屬性     var str="";//定義一個字串執行個體str,調用String對象追加的屬性和方法 document.write(str.good());document.write(str.bad);自訂對象文法規則1、對象建立方式1)、對象初始化器方式格式:objectName = {property1:value1, property2:value2,…, propertyN:valueN} property是對象的屬性value則是對象的值,值可以是字串、數字或對象三者之一範例程式碼: var user={name:"Sn",age:25};2)、建構函式方式編寫一個建構函式,並通過new方式來建立對象,建構函式本可以帶有構造參數範例程式碼:function f(name,age){           this.name=name;          this.age=age;    }var use=new f();C#定義:建構函式1、建構函式的命名必須和類名完全相同;2、建構函式的功能主要用於在類的對象建立時定義初始化的狀態,它沒有傳回值,也不能用void來修飾;3、建構函式不能被直接調用,必須通過new運算子在建立對象時才會自動調用,一般方法在程式執行到它的時候被調用;4、當定義一個類的時候,通常情況下都會顯示該類的建構函式,並在函數中指定初始化的工作也可省略;5、當一個類只定義了私人(private)的建構函式,將無法通過new關鍵字來建立其對象(不可訪問,因為它受保護層級限制);當一個類沒有定義任何建構函式,C#編譯器會為其自動產生一個預設的無參的建構函式;除非類是static類;javascript定義:建構函式javascript中的建構函式是允許有傳回值的,但通常不設定傳回值如果一個建構函式有一個傳回值,則返回的對象成為new運算式的值。在此情況下,作為this的對象將會被拋棄。建構函式作用:使自己的對象多次複製,同時執行個體根據設定的訪問等級可以訪問其內部的屬性和方法當對象被執行個體化後,建構函式會立即執行它所包含的任何代碼/*函數定義函數是由這樣的方式進行聲明的:關鍵字 function、函數名、一組參數,以及置於括弧中的待執行代碼。 函數的構造文法有這三種: 1.function functionName(arg0, arg1, ... argN) { statements }             //function語句 2.var function_name = new Function(arg1, arg2, ..., argN, function_body);//Function()建構函式 3.var func = function(arg0, arg1, ... argN) { statements };              //函數直接量 範例程式碼:*/function fn(x){return x*x};                  //1.function語句 var Fnc = new Function("x","return x*x;");   //2.Function()建構函式 var fact = function(x){return x*x;};         //3.函數直接量、匿名函數、運算式document.write(fn(10));  //顯示 100document.write(Fnc(10)); //顯示 100 document.write(fact(10));//顯示 100/*註:如果函數無明確的傳回值,或調用了沒有參數的 return 語句,那麼它真正返回的值是 undefined。*//*Function()建構函式 函數實際上是功能完整的對象 。Function類可以表示開發人員定義的任何函數。用Function類直接建立函數的文法如下: var function_name = new function(arg1, arg2, ..., argN, function_body) 在上面的形式中,每個arg都是一個參數,最後一個參數是函數主體(要執行的代碼)。這些參數必須是字串。範例程式碼:*/var f = new Function("x","x*x;");document.write(f(10));  //顯示:100document.write(f);      //顯示:function anonymous(x) { return x*x; }   匿名(anonymous)document.write(f(10));  //undefineddocument.write(f);      //顯示:function anonymous(x) { x*x; }/*注意:儘管可以使用 Function 建構函式建立函數,但最好不要使用它,因為用它定義函數比用傳統方式要慢得多。不過,所有函數都應看作 Function 類的執行個體 。 如果你定義的函數沒有參數,那麼可以只需給建構函式傳遞一個字串(即函數的主體)即可。 注意:傳遞給建構函式Function()的參數中沒有一個用於說明它要建立的函數名。用Function()建構函式建立的未命名函數有時被稱為“匿名函數”。 Function()函數允許我們動態地建立和編譯一個函數,它不會將我們限制在function語句先行編譯的函數體中。*//*函數直接量 函數直接量是一個運算式,它可以定義匿名函數。函數直接量的文法和function語句非常相似,只不過它被用作運算式,而不是用作語句,而且也無需指定函數名。文法: var func = function(arg0, arg1, ... argN) { statements };//函數直接量 雖然函數直接量建立的是未命名函數,但是它的文法也規定它可以指定函數名,這在編寫調用自身的遞迴函式時非常有用。範例程式碼:*/var f = function fact(x) {     if (x <= 1)         return 1;     else         return x * fact(x - 1); }; document.write(f(10));//顯示:隨機數,因為傳回值小於0/*註:它並沒有真正建立一個名為fact()函數,只是允許函數體用這個名字來引用自身。函數名並沒有什麼實質意義,它不過是用來儲存函數的變數名字,這個變數只是儲存的位置可能不一樣而已,可以將這個函數賦給其他變數,它仍然會以相同方式起作用。*//*Function()建構函式和函數直接量差別  Function()建構函式和函數直接量之間的差別有一點就是:使用建構函式Function()建立的函數不使用詞法範圍,相反的,它們總是被頂級函數來編譯,如:範例程式碼:*/var y = "global"; function constructFunction() {     var y = "local";     return new Function("return y;");//Function()建構函式,不使用局部範圍 } function constFunction() {     var y = "local";     var f = function () {           //函數直接量,使用局部範圍         return y;       };     return f; } document.write(constructFunction()());  //顯示 global,因為Function()建構函式返回的函數並不使用局部範圍 document.write(constFunction()());      //顯示 lobal,因為函數直接量返回的函數並使用局部範圍 /*註:它並沒有真正建立一個名為fact()函數,只是允許函數體用這個名字來引用自身。函數名並沒有什麼實質意義,它不過是用來儲存函數的變數名字,這個變數只是儲存的位置可能不一樣而已,可以將這個函數賦給其他變數,它仍然會以相同方式起作用。*//*javascript中的建構函式是允許有傳回值的,但通常不設定傳回值如果一個建構函式有一個傳回值,則返回的對象成為new運算式的值。在此情況下,作為this的對象將會被拋棄。*/function定義建構函式function f(x){     this.x = x; } document.write(f(10));//顯示:10var o=new f(10);document.write(o.x);//顯示:10/*javascript對象{}//定義對象文法 var object={}; //對象內的屬性文法(屬性名稱(property)與屬性值(value)是成對出現的) object.property=value; //對象內的函數文法(函數名(func)與函數內容是成對出現的) object.func=function(){...;}; 範例程式碼:*/var object={}; object.property='value';object.func=function(){return 'fn'};document.write(object.property);         //顯示:valuedocument.write(object.constructor);      //顯示:function Object() { [native code] }document.write(object.func.constructor); //顯示:function Function() { [native code] }/*javascrip原型(prototype)與屬性(property)prototype是建構函式的一個屬性,該屬性指向一個對象,對象原型的屬性在所有的執行個體中找到。//定義對象文法 obj.prototype={}; 範例程式碼:*/var object={}; object.func=function(){return 'fn'};object.func.prototype={    prop:'屬性值'};object.func.prototype.newsprop={    prop:'再動態添加新的屬性'};object.func.prototype.newsfn=function(){    return '再動態添加新的方法'};document.write(new object.func().prop);         //顯示:屬性值 document.write(new object.func().newsprop.prop);//顯示:再動態添加新的屬性 document.write(new object.func().newsfn());     //顯示:再動態添加新的方法  /*註:一定要執行個體new當然原型與屬性名稱跟函數名一樣並沒有什麼實質意義,它不過是用來儲存函數的變數名字,這個變數只是儲存的位置可能不一樣而已,可以將這個函數賦給其他變數,它仍然會以相同方式起作用。*/this.特權(屬性和方法)、prototype.公有(屬性和方法)、function.(屬性和方法)<script type="text/javascript">function f(x){     this.public_v = x;                  //特權屬性(公有屬性),只有在被執行個體化後的執行個體中可調用,即:new f().x    var private_v;                      //私人屬性,只能在建構函式內部可調用    var new_f = this;                   //this為當前執行的對象,即:new_f=this=new f();    function private_fn(){              //私人方法,調用執行個體對象的屬性值,即:get_x=new f().x;         return new_f.x;     }     this.publice_fn = function(){      //特權方法(公有方法),只有在被執行個體化後的執行個體中可調用         return x;                      //在公有方法中可以訪問私人成員和公有屬性和方法     }}f.prototype.prototype_f = function(){   //公有方法,必須通過new關鍵字執行個體化,                                        //向prototype中新增成員將會把新方法添加到建構函式的底層中去     return '由prototype添加的成員!';}f.static_p = '靜態屬性';                //靜態屬性,不能用於new,適用於對象的特殊執行個體,就是作為Function對象執行個體的建構函式本身f.static_f = function(){                //靜態方法,不能用於new     return '靜態方法';     }var o=new f(10);                        //new 執行個體化document.write(o.public_v+'\n');        //顯示:10document.write(o.publice_fn()+'\n');    //顯示:10document.write(o.prototype_f()+'\n');   //顯示:由prototype添加的成員!document.write(f.static_p);             //顯示:靜態屬性 document.write(f.static_f()+'\n');      //顯示:靜態方法 /*註:在無執行個體的情況下,this.特權(屬性和方法)、prototype.公有(屬性和方法)、function.(屬性和方法)三者之間互不能調用(特權)私人和(特權)公有成員在函數的內部,在建構函式建立的每個執行個體中都會包含同樣的私人和公有成員的副本,因而執行個體越多佔用的記憶體越多*/js物件導向設計用{}好還是function(){}好(建構函式){}可以算做一個單例(單例模式) function(){} 這種返回一個對象。每次都NEW的時候返回都是一個不同的對象!上面有同學也說了 {} 更效率了。而且不用new。{} 全域固定,可任意擴充。 一般來說{}確實效率高,使用簡單隨意,不過不想暴漏某些方法時候用 function 更好javascript解析JSON一、JSON(javascript Object Notation) 是一種輕量級的資料交換格式,JSON是javascript文法的一個子集,javascript中{}代表一個對象, []代表一個數組,調用的文法跟javascript裡的{}、[]一樣。JSON建構於兩種結構:1、值的有序列表,數組json([{"name":"value"}])。2、值的有無序列表,({"name":"value"})。JSON具有以下這些形式:1、JSON對象是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括弧)開始,“}”(右括弧)結束。每個“名稱”後跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔。2、數組是值(value)的有序集合。一個數組以“[”(左中括弧)開始,“]”(右中括弧)結束。值之間使用“,”(逗號)分隔。3、值(value)可以是雙引號(不可以是單引號)括起來的字串(string)、數值(number)、true、false、 null、對象(object)或者數組(array)。這些結構可以嵌套。4、字串(string)是由雙引號包圍的任意數量Unicode字元的集合,使用反斜線轉義。一個字元(character)即一個單獨的字串(character string)。JSON檔案格式和JSON檔案注釋JSON檔案格式,尾碼名為.json。JSON本身就是為了壓縮文本,所以不能在JSON檔案裡加註釋。javascript和json.js一起使用的細節1、JSON寫法與JSON轉為{}對象JSON寫法正確寫法:{"name":"value"}錯誤寫法:{'name':'value'}JSON轉為{}對象,藉助json.js轉換。正確寫法:var obj='{"name":"value"}';錯誤寫法:var obj="{"name":"value"}"; }";對象{}與json轉換範例程式碼json.js:<script src="/js/jquery.js" type="text/javascript"></script><script src="/js/json.js" type="text/javascript"></script>樣本使用JSON.parse將字串轉為json對象<script type="text/javascript">var jsonText = '{"name":"sn","age":"25"}';//注意:單引號寫在{}外,每個屬性名稱都必須用雙引號。var jsonObj=JSON.parse(str);         //把字串轉為json對象document.write (jsonObj.name);        //顯示:sn</script>樣本使用JSON.stringify將json對象轉為字串<script type="text/javascript">var o = {name : 'sn',age : 25         };var jsonText = JSON.stringify(o);    //把json對象轉為字串document.write(jsonText);            //顯示:'{"name":"sn","age":"25"}'</script>

 

 文檔:點擊下載

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.