/** * 封裝 */
function cl( mess){ console.log( mess); } // // 類 , 對象 ; 類型 , 變量 // JavaScript 中 類 是通過 function 關鍵字來定義的 function User( Name, Age){ var age = Age; // 私有,通過 對象 不能訪問 this.name = Name; // 共有,通過 對象 可以訪問 // var say = function(){ alert( "are you ok?"); }; var sayHello = function(){ alert( "hello world"); say(); // 合法,私有方法可以調用私有方法,但是私有方法不能調用共有方法 // this.say(); //不合法, 因爲 this 在這指 window 對象。通過下面查看 // alert( this); }; this.say = function(){ alert( "how are you?"); } // this.getName = function(){ // 共有,其實沒必要,因爲 this.name 是共有,直接通過 對象 可以訪問 return this.name; }; // this.getAge = function(){ // 特權,通過 對象 可以訪問 sayHello(); // 合法 return age; }; this.setAge = function( Age){ // 特權,通過 對象 可以訪問,可以訪問 對象 的私有屬性 age = Age; }; } // 通過 類名 向類中增加 共有方法 和 共有屬性,這種方法增加的成員在所有該類的(包括已經創建的)對象中生效,但是不能覆蓋; // 若 類 定義中聲明瞭同名的 共有成員, 則通過這種方法增加的成員不會覆蓋原來的成員 // 注意是向 =類= 中增加 // 下面兩個都會生效 User.prototype.healthy = false; User.prototype.isFine = function(){ return this.healthy ? "I am fine!! Thanks" : "I am not fine!"; }; // var me = new User( 'zhanglin', 23); for( var name in me){ cl( name + ":::::" + me[name]); } for( var name in me){ // hasOwnProperty() 會過濾掉通過 prototype 原型增加的成員 if( me.hasOwnProperty( name) ){ cl( name + ":::::" + me[name]); } } // me.money = 100; // 增加 =對象= 的屬性(共有),與 類 沒有關係 me.growOld = function(){ var oldAge = this.getAge(); // sayHello(); 不合法,在 =類= 外不能調用 私有 方法 this.setAge( oldAge + 1); } me.growOld(); // // 雖然在 類 定義中沒有這兩個成員,但是在 me 中增加了這兩個成員,因此不會覆蓋 me 中的這兩個成員 // 但是用 類 創建 新對象時,這兩個成員都會在新對象中出現,見 me2 User.prototype.money = 200; User.prototype.growOld = function(){ // alert( "new"); }; // cl( ' '); for( var name in me){ cl( name + ":::::" + me[name]); } // User.prototype.money = 200; User.prototype.growOld = function(){ alert( "OK"); }; // // 下面的不會生效,因爲類定義中已經有了 User.prototype.name = "myhere"; User.prototype.getAge = function(){ return 100; } // var me2 = new User( 'girl', 1000); // cl(" "); for( var name in me2){ cl( name + ":::::" + me2[name]); } me2.growOld();
// // 每個通過 {} 創建的對象的原型都是 Object.prototype。 // /* 對象 A 的原型是 B 1, update 和 delete A 的屬性不會影響 B 的屬性;即 update 或 delete A 的屬性時,只是操作 A,與 B 沒有關係 2, retrieve A 的屬性時,有可能會得到 B 的屬性;即,如果屬性在 A 中不存在就回去 B 中找, 如果 B 中不存在回去 B 的原型找,直到到達 Object.prototype, 如果還沒有返回 undefined 總之: 只有在獲取對象屬性時纔可能與他的原型有關係!! */
/** * this 的理解 * * 非常重要的一點: * this 是動態綁定的,給 this 賦值實在 函數被調用的時候 */ // // Functions in JavaScript are objects. // 函數在 js 中有四種調用方式。 // 1, method 方式 var obj = { value: 1, increment: function(){ this.value += 1; } }; obj.increment(); // // 2, constructor 方式 function User(){ var age; this.name; this.setAge = function( a){ age = a; }; this.getAge = function(){ return age; } } var me = new User(); // 3, function 方式 var add = function( a, b){ return a + b; } add( 1, 2) // 4, apply 方式 var obj = { getValue: function(){ return this.value; } }; var obj_2 = { value: 'myhere' } var v = obj.getValue.apply( obj_2) // // 四種調用方式中 this 的含義不同,主要記錄下 第三種 方式( function 調用) 中的 this // 要查看 this 指哪個對象,直接 alert( this) 就可以 // func_name() 方式中 this 指向 global 對象,通常是 window // // function 調用方式的 this var add = function( a, b){ return a + b; }; Function.prototype.method = function( name, func){ this.prototype[ name] = func; }; Function.method( 'a1', function(){ var slice = Array.prototype.slice, args = slice.apply( arguments); // alert( this) // 爲 window 對象 return function(){ // alert( this) // 爲 函數對象( 函數的 native code) return this.apply( null, args.concat( slice.apply( arguments))); } }( 1)); // 這裏 method 的第二個參數是一個表達式,這個表達式立即執行了。 Function.method( 'a2', function(){ var slice = Array.prototype.slice, args = slice.apply( arguments), that = this; // this 爲動態綁定 return function(){ return that.apply( null, args.concat( slice.apply( arguments))); } }); // 形成 closure,this 要想使 外層函數的 this 在內層函數中可見,必須將外層函數的 this 賦給一個新的變量 var a = add.a1( 2); // a = 3 // 返回的是一個函數運行的結果 var b = add.a2( 4); // 返回的是一個函數 var c = b( 1); // b = 5 /** * this 是動態綁定的,this 賦值是在函數調用的時候 */
在當今數字化時代,社交媒體已成爲人們獲取信息、分享生活和進行商業推廣的重要平臺。隨着社交媒體內容的爆炸性增長,自動化抓取社交媒體上的媒體資源變得尤爲重要。本文將介紹如何使用Puppeteer這一強大的自動化工具來實現這一目標。 1. P
DHTMLX Diagram庫允許用幾行代碼構建JavaScript流程圖,通過自動佈局和實時編輯器,它可以更容易地將複雜數據可視化到一個整潔的層次結構中。 DHTMLX Diagram v6.0版本發佈,帶來了衆多令人興奮的新功能和改進,
引言 在當今數字化時代,網絡數據採集已成爲獲取信息的重要手段之一。Symfony Panther,作爲Symfony生態系統中的一個強大工具,爲開發者提供了一種簡單、高效的方式來模擬瀏覽器行爲,實現網絡數據的採集和自動化操作。本文將通過
DevExtreme擁有高性能的HTML5 / JavaScript小部件集合,使您可以利用現代Web開發堆棧(包括React,Angular,ASP.NET Core,jQuery,Knockout等)構建交互式的Web應用程序。從Ang
DevExtreme擁有高性能的HTML5 / JavaScript小部件集合*使您可以利用現代Web開發堆棧*包括React*Angular*ASP.NET Core*jQuery*Knockout等*構建交互式的Web應用程序。從Ang
引言 隨着大數據時代的到來,網頁爬蟲作爲一種高效的數據收集工具,被廣泛應用於互聯網數據抓取和信息抽取。而知乎是一個知識分享平臺,擁有大量的用戶生成內容。通過爬蟲獲取知乎數據,企業和研究人員可以進行深入的數據分析和市場研究,瞭解用戶的需求
JetBrains IDEs日前正式發佈了v2024.1版本,此版本中最大的亮點就是帶來了AI賦能的全行代碼補全,同時在最新的IDEs中重做了終端、擁有更強大的代碼編輯和導航功能、更智能的代碼分析和提示、更優化的性能、更豐富的插件和集成等。
在當今的互聯網時代,數據的獲取和分析變得日益重要。無論是進行市場研究、用戶行爲分析還是產品開發,獲取大量數據都是不可或缺的一環。然而,很多有價值的信息都隱藏在動態加載的網頁中,這些網頁通過JavaScript動態生成內容,傳統的爬蟲技術
前言 隨着數字音樂的普及,越來越多的用戶選擇在線音樂平臺來享受音樂。網易雲音樂作爲國內領先的音樂服務平臺,不僅提供了豐富的音樂資源,還擁有獨特的社交屬性,吸引了大量的用戶。在衆多的音樂服務中,音頻鏈接的抓取技術成爲了一個重要的需求。無論
引言 Reddit,作爲一個全球性的社交平臺,擁有海量的用戶生成內容,其中包括大量的圖片資源。對於數據科學家、市場研究人員或任何需要大量圖片資源的人來說,自動化地從Reddit收集圖片是一個極具價值的技能。本文將詳細介紹如何使用Pyth
前言 小編之前分享過一篇文章叫《如何使用前端表格控件實現多數據源整合?》(可以放上文章的鏈接)。今天,繼續爲大家介紹如何使用前端表格控件來更新已連接的數據源信息。 環境準備 SpreadJS在線表格編輯器: SpreadJS 前端表格控件新
pt-osc原理探索及其觸發器的深入分析 > 作者:莫善,某互聯網公司高級 DBA。 > > 愛可生開源社區出品,原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 > > 本文約 6000 字,預計閱讀需要 20 分鐘。 背景 自工
本文分享自華爲雲社區《一文徹底喫透MyBatis源碼!!》,作者:冰 河。 寫在前面 隨着互聯網的發展,越來越多的公司摒棄了Hibernate,而選擇擁抱了MyBatis。而且,很多大廠在面試的時候喜歡問MyBatis底層的原理和源碼實現
這個其實是一個特別高頻的面試題,松哥也一直很想和大家仔細來聊一聊這個話題,網上關於這塊的文章很多,但是我一直覺得要把這個問題講清楚還有點難度,今天我來試一試,看能不能和小夥伴們把這個問題梳理清楚,當然,如果小夥伴們覺得看文章不過癮,松哥也有