ECMAScript5之Object

来源:http://www.cnblogs.com/giggle/archive/2016/03/10/5252323.html
-Advertisement-
Play Games

在ECMAScript5中對Object新增的些方法,學習以及demo


在ECMAScript5中對Object新增的些方法,以前沒註意的同志們,嘻嘻,下麵我們再一起來邊看邊學。

1、  Object之create

Create單詞意為創造嘛,作為Object的靜態方法,不言而喻那當然是創建對象唄。

誰的對象呢?

當然不是我的。。。

好吧,Object.create(prototype,descriptors)是創建一個具有指定原型且可選擇性地包含指定屬性的對象並返回。

納尼,什麼意思?

我們一起demo下唄。

<!DOCTYPE html> 
    <head>
        <title>create</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
        <script>
           var newObj = Object.create(null,{
               /*自帶name,age屬性*/
               name: {
                   value: 'Monkey'
               },
               age: {
                   value: 24
               }
           });
           console.log(newObj.name);
           console.log(newObj.age);
           //輸出為null:原因是我們通過Object.create創建了一個null原型的對象
           //http://www.cnblogs.com/giggle/p/5208199.html
           console.log(Object.getPrototypeOf(newObj));
        </script>
    </body>
</html>

下麵是Object.create具體講解: 

Object.create( prototype, descriptors )

prototype

必須。要用作原型的對象。可為null

descrioptors

該對象的屬性。

“數據屬性”可獲取且可設置值的屬性。數據屬性描述符包含value特性,以及writable、enumerable和configurable特性。若未指定最後三個特性,則它們的預設值是false。

返回值

一個具有指定的內部原型且包含指定的屬性的新對象

註:用Object.create創建對象時,descriptors一定要是“數據屬性”哦!!

什麼意思。

我們再來寫個demo,看看

<!DOCTYPE html> 
    <head>
        <title>create</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
        <script>
           var newObj = Object.create(null,{
               //這裡我沒有按照著name:{}這種格式,而是普通格式
               name: 'Monkey',
               age: 24
           });
           //下麵會報錯滴
           console.log(newObj.name);
           console.log(newObj.age);
        </script>
    </body>
</html>
View Code

運行上面的代碼,chrome下看看

大伙看見上面報的錯了麽。切記切記

2、  Object之defineProperty

在上面大家不是看見Object.create方法麽,其實這是核心哦。下麵的都是輔助它的呢。

比如這個defineProperty,其實就是將屬性添加到對象,或修改對象的現有屬性。

Object.defineProperty(object, propertyName, descriptor)

object

必須。在其上添加新屬性或修改已有屬性。

propertyName

必須。屬性名

descriptor

又是它。描述屬性的

返回值

已修改的對象

Demo一下:

<!DOCTYPE html> 
    <head>
        <title>defineProperty</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
        <script>
            var obj = Object.create(null);
            //利用defineProperty為obj對象添加一個newDataProperty屬性
            Object.defineProperty(obj,"newDataProperty",{
                value:'Monkey',
                writable:true
            });
            console.log(obj.newDataProperty);
        </script>
    </body>
</html>
View Code

3、  Object之defineProperties

在上面我們看見了Object.defineProperty是添加或修改一個屬性,這個嘛,從單詞就知道咯,複數嘛,就是添加或修改一個或多個屬性到對象咯。

Object.defineProperties(object,descriptors)

object

必須。對其添加或修改的屬性對象

descriptors

必須。包含一個或多個描述對象的JavaScript對象。

返回值

已修改的對象

 

<!DOCTYPE html> 
    <head>
        <title>defineProperties</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
        <script>
            var obj = Object.create(null);
            //利用defineProperties為obj對象添加兩個新屬性
            Object.defineProperties(obj,{
                name:{
                    value:'Monkey'
                },
                age: {
                    value:24
                }
            });
            console.log(obj.name);
            console.log(obj.age);
        </script>
    </body>
</html>
View Code

4、  Object之getOwnPropertyDescriptor

這個靜態方法就是,獲取指定對象自身屬性的描述符。而不是從對象的原型繼承的哦。

Object.getOwnPropertyDescriptor(object,propertyname)

object

必須。訪問屬性的對象

propertyname

必須。屬性名

返回值

屬性描述符

 

<!DOCTYPE html> 
    <head>
        <title>getOwnPropertyDescriptor</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
        <script>
            //通過Object.create創建一個對象
            var obj = Object.create(null,{
                name:{
                    value:'Monkey',
                    writable:true
                }
            });
            //獲得name的描述對象
            var descriptor = Object.getOwnPropertyDescriptor(obj,'name');
            console.log(descriptor);
        </script>
    </body>
</html>
View Code

從上面可以看出Object.getOwnPropertyDescriptor的確是返回的屬性的描述信息對象哦。

5、  Object之getOwnPropertyNames

返回對象自己的屬性名稱。是對象自己的,而不是繼承的哦。

Object.getOwnPropertyNames(object)

object

必須。返回屬於該對象的所有屬性名

返回值

包含對象自己屬性的名稱

<!DOCTYPE html> 
    <head>
        <title>getOwnPropertyNames</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
        <script>
            function Fn(name,age){
                this.name = name;
                this.age = age;
                this.fn1 = function(){
                    console.log(this.name+"    "+this.age);
                };
            }
            Fn.prototype.fn2 = function(){
                console.log(this.name);
            };
            Fn.prototype.attr1 = this.name;
            obj = new Fn('Monkey',24);
            /*
                從上面的代碼可知:obj自己的對象為name,age,fn1
                                  繼承的為fn2,attr1
            */
            console.log(Object.getOwnPropertyNames(obj));
        </script>
    </body>
</html>
View Code

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 高德地圖api解釋的實在是太爛了,一度想用系統獲取location,添加button實現定位功能,奈何高德地圖右上角又有定位按鈕,於是乎高德地圖定位研究如下: package com.example.basicmap; import java.util.List; import android.ap
  • BeanFactory是Spring IOC實現的基礎,這邊定義了一系列的介面,我們通過這些介面的學習,可以大致瞭解BeanFactory體系各介面如何分工合作.為閱讀具體實現打下基礎.
  • JSP中文亂碼解決方案,給出了較為詳細的步驟。
  • 數組(Array),字面上講,就是一組相同的數據,一種簡單的線性結構,對應到記憶體上,就是一塊連續的固定大小的記憶體塊的組合。一旦用到數組,說明我們對數據的規模是心中有數的,因此數組的大小是需要提前預定的。 效率,電腦永遠不會停止追求效率。為了追求效率,數組表現出它最明顯的兩個特點,其一,數組大小需要
  • 創建對象 var box = new Object();//創建對象 box.name = 'Lee'; //添加屬性 box.age = 100; box.run = function(){ return this.name + this.age + "運行中"; //this 表示當前作用域下對
  • javascript得到客戶端IP的新方法 很久以來,我都是經過http://fw.qq.com/ipaddress來得到客戶端用戶的IP,這個方法簡單、快速、實用 。 我們調用它的寫法是: <script type="text/javascript" src="http://fw.qq.com/i
  • 在HTML頁面完成展現之後,動態改變頁面元素或調整CSS樣式都會引起瀏覽器重繪,性能的損耗直接取決於動態改變的範圍:如果只是改變一個元素的顏色之類的信息則只會重繪該元素;而如果是增刪節點或調整節點位置則會引起其兄弟節點也一併重繪。 減少重繪並不是說不要重繪,而是要註意重繪範圍:①改...
  • jQuery Easy是一組基於jQuery的UI插件集合,EasyUI的目標就是幫助web開發者更輕鬆的打造出功能豐富並且美觀的UI界面。開發者不需要編寫複雜的javascript,也不需要對css樣式有深入的瞭解,開發者需要瞭解的只有一些簡單的html標簽。 註:jQuery的特點 基於jQue
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...