js實例成員(js什麼是實例)

本文目錄一覽:

求助,關於js面向對象成員方法的

JavaScript中對象的創建有以下幾種方式:

(1)使用內置對象

(2)使用JSON符號

(3)自定義對象構造

一、使用內置對象

JavaScript可用的內置對象可分為兩種:

1,JavaScript語言原生對象(語言級對象),如String、Object、Function等;

2,JavaScript運行期的宿主對象(環境宿主級對象),如window、document、body等。

我們所說的使用內置對象,是指通過JavaScript語言原生對象的構造方法,實例化出一個新的對象。如:

複製代碼 代碼如下:

var str = new String(“實例初始化String”);

var str1 = “直接賦值的String”;

var func = new Function(“x”,”alert(x)”);//示例初始化func

var o = new Object();//示例初始化一個Object

二、使用JSON符號

(i)何謂JSON ?

JSON (JavaScript Object

Notation)即JavaScript對象命名,是一種輕量級的數據交換格式,易於閱讀和編寫,同時也易於及其解析和生成。它基於

《JavaScript Programming Language, Standard ECMA-262 3rd Edition –

December 1999》的一個子集。JSON是完全獨立於語言的文本格式,因此成為數據交換的理想格式。

JSON作為

JavaScript的一個自己,同時ActionScript、C、C#、ColdFusion、E、Java、JavaScript、ML、

ObjectiveCAML、Perl、PHP、Python、Rebol、Ruby、Lua等一系列的語言都提供支持,使得JSON成為Ajax開發的

首選方案。

JSON有兩種構建方式,一種是採用簡單的逗鍵/值對地的集合,在不同的語言中被理解為對象、記錄、結構、字典、哈希表、有鍵列表,或者關聯數組等,另一種採用有序的值列表,大部分語言把它理解為數組。

常用的創建方式是第一種,即採用逗鍵/值對地集合的形式。在這種形式下,一個對象以逗{地(左括弧)開始,逗}地(右括弧)結束。每個逗名稱地後跟一個逗:地(冒號),逗

『鍵/值’ 對地之間使用逗,地(逗號)分隔。

JSON具有以下特點:(1)簡單格式化的數據交換;(2)易於人們的讀寫習慣;(3)易於機器的分析和運行。

在JavaScript中,JSON被理解為對象。通過字元串形式的JSON,數據可以很方便地解析成JavaScript獨享,並進行數據的讀取傳遞。通過JSON,在一定程度上客服了JavaScript對象無法作為參數系列化傳遞的問題。

1,簡單的JSON

{name:”劉德華”,age:”25″,sex:”男”}

2,JSON值的類型

JSON的值可以是簡單的數據類型,例如數字、浮點、字元等,也可以是數組及對象。例如以數組作為member鍵值的JSON:

{member:[{name:”劉德華”},{name:”郭富城”},{name:”張學友”},{name:”黎明”}]}

{

book:[{name:”三國演義”},{name:”西遊記”},{name:”水滸傳”},{name:”紅樓夢”}],

author:[{name:”羅貫中”},{name:”吳承恩”},{name:”施耐安”,{name:”曹雪芹”}}]

}

3,在JavaScript中使用JSON

JSON是JavaScript原生格式,這意味著在JavaScript中處理JSON數據不需要任何特殊的API或者工具包,JavaScript默認將JSON當做一個對象處理。

將對象傳遞給一個變數,例如:

複製代碼 代碼如下:

var somebooks = {

book:[{name:”三國演義”},{name:”西遊記”},{name:”水滸傳”},{name:”紅樓夢”}],

author:[{name:”羅貫中”},{name:”吳承恩”},{name:”施耐安”,{name:”曹雪芹”}}]

}

JSON的每個逗鍵地相當於對象的屬性,例如訪問book中的第一個條目,在JavaScript中,就可以簡單地使用逗somebooks.book[0].name地來獲取逗三國演義地這個值。

我們不但可以將一個JSON字元串轉化為對象,反過來將一個對象逗編譯地為一個JSON字元串,以方便JavaScript中的對象的傳輸。例如:

複製代碼 代碼如下:

var Animals = new Object();

Animals.name = “dog”;

Animals.sex = “Male”;

Animals.age = “2”;

Animals對象無法被序列化傳輸,將Animals對象轉化為JSON字元串,也就是逗{name:”dog”,sex:”Male”,age:”2″}地。這樣,把該JSON字元串作為HTTP請求的一個參數傳遞,從而達到序列化傳輸Animals對象的目的。

(ii)JSON通過字元串形式來表達JavaScript的對象。如:

複製代碼 代碼如下:

var myObject = {nickname:”my girlfried”,name:”big

pig”};

JSON

實際上充當了一種在JavaScript對象和字元串之間實現相互轉換的協議。由於JSON的逗外表地可以看成但村的字元串,因此JSON在

JavaScript的對象傳輸方面可以起到一定的作用。例如把對象strObject轉換成字元串後進行傳輸,在達到目的地後通過eval方法將其還原

成對象:

複製代碼 代碼如下:

function test (o)

{

alert (o.name)

}

var strObject = ‘{nickname:”my girlfriend”,name:”big pig”}’;

test (eval_r(“(” + strObject + “)”));

三、自定義對象構造

創建高級對象構造有兩種方式:使用逗this地關鍵字構造、使用原型prototype構造。如:

複製代碼 代碼如下:

//使用this關鍵字定義構造的上下文屬性

function Girl()

{

this.name = “big pig”;

this.age = 20;

this.standing;

this.bust;

this.waist;

this.hip;

}

//使用prototype

function Girl(){}

Girl.prototype.name = “big pig”;

Girl.prototype.age = 20;

Girl.prototype.standing;

Girl.prototype.bust;

Girl.prototype.waist;

Girl.prototype.hip;

alert(new Girl().name);

上例中的兩種定義在本質上沒有區別,都是定義逗Girl地對象的屬性信息。逗this地與逗prototype地的區別主要在於屬性訪問的順序。如:

複製代碼 代碼如下:

function Test()

{

this.text = function()

{

alert(“defined by this”);

}

}

Test.prototype.test = function()

{

alert(“defined by prototype”);

}

var _o = new Test();

_o.test();//輸出逗defined by this地

當訪問對象的屬性或者方法是,將按照搜索原型鏈prototype

chain的規則進行。首先查找自身的靜態屬性、方法,繼而查找構造上下文的可訪問屬性、方法,最後查找構造的原型鏈。

逗this地

與逗prototype地定義的另一個不同點是屬性的佔用空間不同。使用逗this地關鍵字,示例初始化時為每個實例開闢構造方法所包含的所有屬性、方法

所需的空間,而使用逗prototype地定義,由於逗prototype地實際上是指向父級的一種引用,僅僅是個數據的副本,因此在初始化及存儲上都比

逗this地節約資源。

JS類中,靜態方法怎麼獲取實例

1,靜態的成員直接類名點成員名就能訪問。

2,實例成員你需要先創建新的實例!然後實例名點成員名!

JS怎麼在類實例的事件處理函數中訪問類實例的成員

在事件處理函數之外定義一個變數 var that = this;

然後在事件處理函數之內用 that.成員名 訪問。

如果支持ES6的話,直接使用箭頭函數可以直接用 this訪問。

javascript的對象和變數之間的區分

0, JavaScript的變數有幾種類型: number, string, boolean, function, object, 對象就是變數的一種類型.

1,var request = createRequest();

我可以吧request當作一個變數,由createRequest方法來賦值;

這個說法有歧義, 不是由方法對變數賦值, 而是使用createRequest的返回值為變數賦值.

2, 我也可以把它當作一個object,於是request.xxx可以訪問createRequest方法裡面的xxx。

這個理解是錯的, 從外部不能訪問到方法內部定義的變數. 有一種特殊的情況:

function closure(){

var a = 1;

return function() {

return a++;

}

}

var fn = closure();

alert(fn()); //1;

alert(fn()); //2; 函數內部的變數被改變了

這個是JavaScript的閉包機制, 可以在方法外部修改方法的內部變更量. 類似於.Net的委託機制(Java的Callback); 並且這個內部變數的行為類似強制類型語言中的實例私有成員, 參考下面的代碼:

//接上面的代碼

var fn2 = closure();

alert(fn2()); //1, 創建了新的閉包

alert(fn()); //3, 原有閉包並未釋放,

fn = null; //將對閉包內部變數的引用釋放(將fn賦其它值也一樣, fn = 1;), 則該閉包將會被gc回收

3, 對象, JavaScript對象一定是使用new關鍵字創建.

var a = {}; //簡化寫法等價於 var a = new Object();

var b = []; //簡化寫法等價於 var a = new Array();

4, 實例, javascript不是面向對象的語言, 但是對象有默認的constructor屬性, 引用創建對象的function(可以理解為某類型的實例). 但是, 因為javascript是弱類型動態語言, 可以動態修改對象的結構或使用其它類型的引用為變數賦值, 所以並不能在語言層面確保對象的封裝, 參考下面的代碼:

function class(){

this.a = 1;

this.b = ‘a’;

}

function somethingElse() {

return 1;

}

//創建3個class的實例

var a = new class();

var b = new class();

var c = new class();

//此時 a.constructor === b.constructor === c.constructor === class;

a.constructor = somethingElse; //覆蓋constructor屬性, 這樣a就和class沒有任何關聯了, 雖然有一個instanceof二元操作符, 但是其實現是比較prototype, 本例中都沒有指定prototype(默認{}), 所以instanceof是無效的, a instanceof class == true, a instanceof somethingElse == true, a instanceof Object == true,

b = new somethingElse(); //這時b就變成somethingElse的實例了(b.constructor === somethingElse), 但是somethingElse方法沒有為實例添加任何成員, 所以b = {};

delete c.b; //刪除對象的成員, c = {a: 1}, 這樣雖然c.constructor === class(還是class的實例), 但是與其它由class創建的實例外觀就不同了.

js里為什麼實例化的對象沒有prototype屬性??

自從有了Ajax這個概念,JavaScript作為Ajax的利器,其作用一路飆升。JavaScript最基本的使用,以及語法、瀏覽器對象等等東東在這裡就不累贅了。把主要篇幅放在如何實現JavaScript的面向對象編程方面。 1. 用JavaScript實現類 JavaScritpt沒有專門的機制實現類,這裡是藉助它的函數允許嵌套的機制來實現類的。一個函數可以包含變數,又可以包含其它函數,這樣,變數可以作為屬性,內部的函數就可以作為成員方法了。因此外層函數本身就可以作為一個類了。如下:function myClass()這裡 myClass就是一個類。其實可以把它看成類的構造函數。至於非構造函數的部分,以後會詳細描述。 2. 如何獲得一個類的實例 實現了類就應該可以獲得類的實例,JavaScript提供了一個方法可以獲得對象實例。即 new操作符。其實JavaScript中,類和函數是同一個概念,當用new操作一個函數時就返回一個對象。如下:var obj1 = new myClass(); 3. 對象的成員的引用 在JavaScript中引用一個類的屬性或方法的方法有以下三種。 1 點號操作符 這是一種最普遍的引用方式,就不累贅。即如下形式:對象名.屬性名;對象名.方法名; 2 方括弧引用 JavaScript中允許用方括弧引用對象的成員。如下:對象名[“屬性名”];對象名[“方法名”]; 這裡方括弧內是代表屬性或方法名的字元串,不一定是字元串常量。也可以使用變數。這樣就可以使用變數傳遞屬性或方法名。為編程帶來了方便。在某些情況下,代碼中不能確定要調用那個屬性或方法時,就可以採用這種方式。否則,如果使用點號操作符,還需要使用條件判斷來調用屬性或方法。 另外,使用方括弧引用的屬性和方法名還可以以數字開頭,或者出現空格,而使用點號引用的屬性和方法名則遵循標示符的規則。但一般不提倡使用非標示符的命名方法。 3 使用eval函數 如果不希望使用變數傳遞變數或方法名,又不想使用條件判斷,那麼eval函數是一個好的選擇。eval接收一個字元串類型的參數,然後將這個字元串作為代碼在上下文中執行,返回執行的結果。這裡正是利用了eval的這一功能。如下:alert(eval(“對象名.” + element.value)); 4. 對對象屬性,方法的添加、修改和刪除操作 JavaScript中,在生成對象之後還可以為對象動態添加、修改和刪除屬性和方法,這與其它面向對象的語言是不同的。 nbsp

如果幫助到您,請記得採納為滿意答案哈,謝謝!祝您生活愉快! vae.la

原創文章,作者:VOUB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/134789.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VOUB的頭像VOUB
上一篇 2024-10-04 00:08
下一篇 2024-10-04 00:08

相關推薦

發表回復

登錄後才能評論