當前位置:首頁 » 密碼管理 » javascript訪問器屬性

javascript訪問器屬性

發布時間: 2022-06-30 09:10:14

Ⅰ 對象決定類的屬性

ECMAScript有兩種屬性:

1.數據屬性:

數據屬性包含一個數據的位置,在這個位置可以讀取和寫入值。

2.訪問器屬性

訪問器屬性不包含數據值:它們包含一對getter和setter函數(不過這兩個函數都不是必須的),在讀取訪問器屬性時,會調用getter函數,這個函數負責返回有效的值;在寫入訪問器屬性時,會調用setter函數並傳入新值,這個函數負責決定如何處理數據。
對象屬性是由名字,值和一組特性(attribute)構成的。
在介紹對象屬性的特性之前先介紹兩個屬性:

getter和setter

在ECMAScript5中,屬性值可以用一個或兩個方法代替,這兩個方法就是getter和setter。由這兩個函數定義的屬性稱為「存取器屬性」,它不同於「數據屬性」,數據數據屬性只有一個簡單的值。程序在查詢存取器屬性的值的時候,JS調用getter方法(無參數)。這個方法的返回值就是屬性存取表達式的值。當程序設置一個存取器屬性的值,JS調用setter方法,將賦值表達式右側的值當做參數傳入setter。這個方法負責設置屬性值。可以忽略setter方法的返回值。
和數據屬性不同,存取器屬性不具有可寫性。如果一個數據同時具有getter和setter方法,那麼它是一個讀/寫屬性。如果它只有getter方法,那麼它是一個只讀屬性,如果它只有setter方法,那麼它是一個只寫屬性,讀取只寫屬性總是返回undefined。

小插曲:屬性訪問表達式

屬性訪問表達式運算得到一個對象屬性或一個數組元素的值。JS為屬性訪問定義了兩種語法:

//expression指定對象,identifer指定需要訪問的屬性名稱
expression.identifer
//expression指定對象,第二個表達式指定要訪問的屬性的名稱或者代表要訪問數組元素的索引
expression[expression]
1
2
3
4
1
2
3
4
不管用哪種形式的屬性訪問表達式,在.或者』[『的表達式總是會首先計算。如果計算結果是null或者undefined,表達式會拋出一個類型錯誤異常,因為這兩個值都不能包含任意屬性的值

如果運算結果不是對象(或者數組),JS會將其轉換為對象

用.indentifer的寫法=更加簡單,但是需要注意的是這種方式只適用於訪問的屬性名稱是合法的標識符,並且需要知道要訪問的屬性名稱。如果屬性名稱是一個保留字或者包含空格標點符號,或者是一個數字(對於數組),則必須使用方括弧的寫法。

Ⅱ 用JS腳本如何更好的解決找不到ID對象的問題訪問器的使用必須條件是什麼比如說添加某些屬性之類的。

js腳本尋找對象的必須前提是:你想訪問的對象輸出,必須在對應js代碼實際執行的前面。
否則無論用任何辦法,都是無法訪問到此對象的。

Ⅲ 類的屬性訪問器有哪些功能和語法

public:這是公有的成員,允許類外直接訪問,當然,這要加上類作用域符::, protected:這是保護成員,只允許該類及其派生類訪問 private:這是私有成員,只允許在該類中進行訪問,當然,在類外只可以通過設定的公有函數進行訪問。 更具體的可以參考《C++大學教程第五版》,這本書不錯。

javascript數據屬性和訪問器屬性

defineProperties可以讓你設置屬性的配置,例如如何賦值,如何返回,是否允許被for in遍歷,不過這多半是用在oop中的,因為你可能會需要設置對象的私有屬性,公共屬性是不需要這么復雜的創建過程。

至於其中包含了set和get方法,你可以這么理解,屬性的賦值與獲取必須按照你設定的方法來執行,例如
get:function(){
return this._year;
},
在調用book.year時就會自動執行get方法,返回你要返回的東西( return this._year),

同樣在你執行book.year=111;同樣會自動執行set方法,將會按你的要求設置某些東西。

總之賦值與獲取都必須由年來控制,比如你永遠需要一個大於0的數字做分母,那麼你就能控制了
,只要設置好set函數就行。

這些方法按理說應該是用在oop中,js中只要是對象都能用,看你的程序要求了

Ⅳ javascript中_proto_和__proto__的區別左邊是一條下劃線,右邊是兩條下劃

在javascript中,一個對象就是任何無序鍵值對的集合,如果它不是一個主數據類型(undefined,null,boolean,number,array,string),那它就是一個對象。
那麼如何查看一個對象的原型是啥呢?又如何給一個對象設置原型呢?
標准對象原型訪問器Object.getPrototype(object),到目前為止只有Firefox和chrome實現了此訪問器。除了IE,其他的瀏覽器支持非標準的訪問器__proto__,而prototype則是一個只有函數才具有的屬性,
也就是說,如果這個對象不是函數,那麼它就沒有prototype這個屬性。
下面代碼證實了以上結論。

<script>
var a={name:'derek'};
var b=function(name){
name=this.name;
};
document.write(a.prototype+"<br>");//undefined 對象a顯然不是一個函數,所以沒有prototype這個屬性。
document.write(Object.getPrototypeOf(a)+"<br>");//[object Object]
document.write(Object.getPrototypeOf(b)+"<br>");//function Empty() {}
document.write(Object.getPrototypeOf(b)==b.__proto__);//true 這兩個的是等價的,只不過瀏覽器的兼容型不同。
</script>

再說一下javascript的構造函數
1、構造函數和普通的函數一樣,但是具有以下兩個特殊性質。
2、通常構造函數的首字母是大寫的(讓識別構造函數變得更容易)。構造函數通常要和 new 操作符結合,用來構造新對象。
下面這個例子很厲害~

基於所知道的知識,請想像創建一個新的對象,並讓新對象表現地像數組的過程。一種方法是使用下面的代碼。

1
2
3
4
5
6

// 創建一個新的空對象
varo = {};
// 繼承自同一個原型,一個數組對象
o.__proto__ = Array.prototype;
// 現在我們可以調用數組的任何方法...
o.push(3);

雖然這段代碼很有趣,也能工作,可問題在於,並不是每一個 JavaScript 環境都支持可寫的 __proto__ 對象屬性。幸運的是,JavaScript 確實有一個創建對象內建的標准機制,只需要一個操作符,就可以創建新對象,並且設置新對象的 __proto__ 引用 – 那就是「new」操作符。
varo =newArray();
o.push(3);

JavaScript 中的 new 操作符有三個基本任務。首先,它創建新的空對象。接下來,它將設置新對象的 __proto__ 屬性,以匹配所調用函數的原型屬性。最後,操作符調用函數,將新對象作為「this」引用傳遞。如果要擴展最後兩行代碼,就會變成如下情況:
varo = {};
o.__proto__ = Array.prototype;
Array.call(o);
o.push(3);

函數的 call 方法允許你在調用函數的情況下在函數內部指定「this」所引用的對象。當然,函數的作者在這種情況下需要實現這樣的函數。一旦作者創建了這樣的函數,就可以將其稱之為構造函數。
我們來測試一下,
var Person=function(name,age){
this.name=name;
this.age=age;
document.write("hello,I'm "+name+" and "+age+" years old"+"<br>");
}
var p1=new Person('derek',23);
document.write(Object.getPrototypeOf(p1)==Person.prototype);//true
document.write(p1.__proto__==Person.prototype);//true 兩種訪問對象原型的方式會得到相同的結果,前提是非IE6、7、8瀏覽器。。
可以上面的理論是正確的~
我們接著做實驗,看一下繼承是怎麼實現的~
var Person=function(name,age){
this.name=name;
this.age=age;
document.write("hello,I'm "+name+" and "+age+" years old"+"<br>");
}
Person.prototype.smile=function(){
document.write("O(∩_∩)O~"+"<br>");
}
var p1=new Person('derek',23);
p1.smile();

輸出: hello,I'm derek and 23 years old
O(∩_∩)O~
首先,p1這個對象沒有smile這個函數,於是去__proto__屬性上去找,因為p1.__proto__==Person.prototype,而Person.prototype上恰好有這個函數,因此就會出現上面的運行結果。這個是最簡單的原型鏈,如果Person.prototype上還沒有smile()這個函數,那麼就會去Person.__proto__去繼續找,依次類推。

Ⅵ 如何動態生成 JavaScript 文件

文章目錄一、向客戶端注冊腳本 二、Application_Start 事件裡面生成 JavaScript 文件三、用 Web Form 來實現 四、利用一般處理程序 ashx 文件生成的客戶端代碼調用方式代碼下載一、向客戶端注冊腳本 先用Page.ClentScript.IsClientScriptBlockRegistered()判斷腳本是否已經注冊,若未注冊,則調用 Page.ClientScript.RegisterClicentScriptBlock,具體可以看這篇文章在ASP.NET 2.0 中高效率地使用 JavaScript - Part 1。至於 ASP.NET AJAX,ScriptManager 類有另外一套注冊客戶端腳本的方法。二、在Web應用程序啟動的時候用流往伺服器寫入JavaScript 腳本文件,即在Application_Start 事件裡面生成 JavaScript 文件,然後在頁面里調用。 那就在程序啟動的時候
string path = Server.MapPath("../js/xyz.js ");
// Delete the file if it exists.if (File.Exists(path)){File.Delete(path);}// Create the file.StreamWriter sr = File.CreateText(path);
sr.WriteLine ("function f1()");
sr.WriteLine ("{");
// 這里是f1的內容
//……sr.WriteLine ("}");
sr.Close(); 三、用 Web Form 來實現 在Page_Load 事件裡面輸出 JavaScript 腳本流,然後用 Response.End() 方法將當前所有緩沖的輸出發送到客戶端,停止該頁的執行,因為標簽是在Page Render 事件呈現的,Page Load 事件先於 Page Render 執行,執行到Response.End() ,結束該頁的輸出,Page Reader 的內容就不再輸出了,則後面的 之類的標簽就不會輸出。Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Response.ContentType = "text/javascript" Response.Write("var External = {};" & vbCrLf)
Response.Write("External.hello='Hello, This is external JavaScript output in Page_Load event and end by Response.End() method !';")
Response.End()
End Sub四、利用一般處理程序 ashx 文件 在解決方案資源管理器裡面「添加新項」,選擇「一般處理程序」,點添加後生成一個 ashx 後綴名的文件。該文件類繼承 IHttpHandler 介面,定義 ASP.NET 為使用自定義 HTTP 處理程序同步處理 HTTP Web 請求而實現的協定。它只公開了兩個成員IsReusable: 獲取一個值,該值指示其他請求是否可以使用 IHttpHandler 實例。如果 IHttpHandler 實例可再次使用,則為 true;否則為 false。將 IsReusable 屬性用所提供的重寫 IsReusable 屬性訪問器 (getter) 的代碼顯式設置為 true 或 false。ProcessRequest: 這個輸出數據流的關鍵方法,它通過實現 IHttpHandler 介面的自定義 HttpHandler 啟用 HTTP Web 請求的處理。 用context.Response.Write() 向客戶端輸出數據。
Imports System
Imports System.Web
Public Class OutsiteJS : Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
context.Response.ContentType = "text/plain" context.Response.Write("var Outsite = {};")
context.Response.Write("Outsite.greeting = 'Hello! This is outsite javascript created by ashx file(一般處理程序)';")End SubPublic ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get Return False End Get End PropertyEnd Class 生成的客戶端代碼var External= {};
External.hello='Hello, This is external JavaScript output in Page_Load event and end by Response.End() method !' 調用方式調用方式其實跟通常的調用外部 Javascript 差不多,只是 標簽加上 type="text/javascript" 屬性,以免識別不了文件類型, src 屬性設置為動態文件的文件名,如"makeJS.aspx" 而不是通常的「filename.js」。

Ⅶ 關於javascript: accessor properties 是什麼意思

存取器屬性;訪問器屬性

Ⅷ 關於java訪問器的問題

1.訪問器是針對其他類間接訪問包含有訪問器的類中的私有屬性而設立的,在你的程序中非有涉及到其他類訪問,所以刪除就沒有影響。
2.java中類的成員屬性可以不用給於初始化,系統會給他賦予默認值,但對於方法裡面的變數(局部變數)就應該為其賦予初值,否則編譯會出錯。
3.重載就是在原來的基礎上,再建立一個新的方法並為其分配新的內存空間,原先的方法不變。對於重載的方法,編譯器是通過方法簽名來區分具體調用哪一個方法。一個方法的簽名由方法名、方法的參數和參數的類型組成,即類中方法的簽名具有唯一性。因此,在類中定義重載方法時,每個方法的參數或參數類型要不同。
若方法名,參數類型,參數個數相同的則進行的是重載。

Ⅸ DOM屬性和HTML屬性的區別

一、是否可變的區別:

html屬性中的值是不變的,dom屬性的值是變化的。

二、適用場合不同:

核心DOM適合操作節點,如創建,刪除,查找等;HTML DOM適合操作屬性,如讀取或修改屬性的值。

三、兩者對象不同:

核心DOM :

對象:Document,Node, ElementNode,TextNode,AttributeNode,CommentNode,NodeList

HTML DOM:

對象:image,Table,Form,Input,Select...HTML標簽對象化

(9)javascript訪問器屬性擴展閱讀

使用javascript操作DOM屬性就是操作javascript對象的屬性。javascript對象的屬性是不需要聲明的。有多種方式可以訪問屬性,如下:

myImg.src = "xxxxxx" //使用「.」運算符

myImg["src"] = "xxxxxx" // 使用屬性訪問器

var propName = "src"; myImg[propName] = "xxxxxx" //屬性訪問器支持變數

註:1)因為提供了屬性訪問器,所以可以通過下面的方式遍歷一個DOM對象的所有屬性:

var result = "";

for (var p in myImg){

result += "屬性名:" + p + ",屬性值:" + myImg[p] + " ";

}

Ⅹ Javascript局部變數有沒有屬性描述符,如果有怎麼獲取

js變數沒有屬性描述符吧但是js對象是有value/configurable/writable/enumerable等數據屬性描述符,也包含getter/setter等訪問器屬性。

熱點內容
得力文件夾5302 發布:2024-04-26 00:21:32 瀏覽:90
您的個人文件夾 發布:2024-04-26 00:03:12 瀏覽:67
睿雲伺服器功能介紹 發布:2024-04-25 23:59:51 瀏覽:570
標致5008怎麼連接安卓 發布:2024-04-25 23:25:08 瀏覽:793
安卓下載管理器哪個好 發布:2024-04-25 23:22:48 瀏覽:442
考試系統源碼php 發布:2024-04-25 23:09:46 瀏覽:136
磁碟禁止訪問 發布:2024-04-25 22:53:48 瀏覽:288
多線程ftp上傳 發布:2024-04-25 22:41:36 瀏覽:115
phpqrcode 發布:2024-04-25 22:41:36 瀏覽:33
桂平上網密碼是多少 發布:2024-04-25 22:32:10 瀏覽:575