摘要:使用構造函數屬性來判斷對象的類型檢查數字實際上是否為字符串如果是,則把字符串解析為整數檢查字符串實際上是否為數組如果是,則根據數組用逗號歸并出字符串來變量的類型檢查變量變量變量構造函數用閉包實現的函數化數字求和函數的函數生成器返回一個簡單的
1.使用構造函數屬性來判斷對象的類型
//檢查數字實際上是否為字符串 if (num.constructor == String) { //如果是,則把字符串解析為整數 num = parseInt(num); } //檢查字符串實際上是否為數組 if (str.constructor == Array) { //如果是,則根據數組用逗號歸并出字符串來 str = str.join(","); }2.變量的類型檢查
變量 | typeof變量 | 變量.構造函數 |
---|---|---|
{an:"object"} | object | Object |
["an","array"] | object | Array |
function(){} | function | Function |
"a string" | string | String |
55 | number | Number |
true | boolean | Boolean |
new User() | object | User |
//數字求和函數的函數生成器 function addGenerator(num) { //返回一個簡單的函數,求兩個數字的和,其中第一個數字來自生成器 return function (toAdd) { return num + toAdd } } //addFive現在包含一個接受單一參數的函數,這個函數能求得5加上該參數的和 var addFive = addGenerator(5); console.log(addFive(4));//輸出94.使用匿名函數來隱藏全局作用域變量
(function(){ //變量原本應該是全局的 var msg = "test"; //將一個新函數綁定到全局對象 window.onunload = function(){ //這個函數使用了隱藏的msg alert(msg); }; //關閉匿名函數并執(zhí)行 })();5.使用匿名函數來激發(fā)出創(chuàng)建多個使用閉包的函數所需的作用域
//一個ID為main的元素 var obj = document.getElementById("main"); //用于綁定一個數組 var items = ["click", "keypress"]; //遍歷數組的每個成員 for (var i = 0; i < items.length; i++) { //使用一個自執(zhí)行的匿名函數來激發(fā)出作用域 (function () { //記住在這個作用域內的值 var item = items[i]; obj["on" + item] = function () { /item引用本for循環(huán)上下文所屬作用域中的一個父變量 alert("alert" + item); } })(); }6.在上下文對象內使用函數并將其上下文對象切換為另一個變量
var obj = { yes: function () { //this==obj this.val = true; }, no: function () { this.val = false; } }; //我們發(fā)現"obj"對象沒有val屬性 alert(obj.val == null); //執(zhí)行yes函數后,將val屬性與"obj"對象關聯起來 obj.yes(); alert(obj.val == true); //不過現在把window.no指向obj.no并執(zhí)行之 window.no = obj.no; window.no(); //結果是obj對象的val不變(因為no的上下文已經變?yōu)閣indow對象了) alert(obj.val == true); //而window的val屬性被更新了 alert(window.val == false);
把obj.no變量的上下文對象切換為window變量時,代碼變得不好理解了。幸運的是,JavaScript提供了一套方法來讓這一過程變得更好理解和實現。即call和apply兩個方法。
7.修改函數上下文對象的例子//一個設置上下文對象顏色樣式的簡單函數 function changeColor(color) { this.style.color = color; } //在window對象中調用此函數會失敗,因為window對象沒有style屬性 changeColor("white"); //找出ID為main的文檔 var main = document.getElementById("main"); //使用call方法將它的顏色置為黑色 changeColor.call(main, "black"); //設置body元素顏色的函數 function setBodyColor() { //apply方法將上下文對象設置為第一個參數指定的body元素,第二個參數是傳給函數的所有參數的數組 changeColor.apply(document.body, arguments); } //將body的背景色置為黑色 setBodyColor("black");8.使用constructor屬性的例子
//創(chuàng)建一個新的簡單的User對象 function User() { } //創(chuàng)建一個User對象 var me = new User(); //還是創(chuàng)建一個新的User對象(用前一個對象的constructor引用來創(chuàng)建) var you = new me.constructor(); //你可以發(fā)現這兩個對象的constructor實質上是一致的 alert(me.constructor == you.constructor);9.對象的方法通過prototype對象添加的例子
//創(chuàng)建一個新的User構造函數 function User(name, age) { this.name = name; this.age = age; } //將一個新的函數添加到此對象的prototype對象中 User.prototype.getName = function () { return this.name; }; //并再給此prototype對象添加一個函數,注意其上下文是實例化后的對象 User.prototype.getAge = function () { return this.age; }; //實例化一個新的User對象 var user = new User("Bob", 44); //可以看到我們添加的這兩個屬性都在剛才創(chuàng)建的對象中,并且有合適的上下文 alert(user.getName == "Bob"); alert(user.getAge == 44);10.私有方法
私有方法和私有變量只允許其他的私有方法、私有變量和特權方法訪問。這種方法可以定義一些只讓對象內部訪問,而外部訪問不到的代碼。
//表示教室的一個對象構造函數 function Classroom(students, teacher) { //用于顯示所有班上學生的私有方法 function disp() { alert(this.names.join(",")); } //將班級數據存入公共對象屬性中 this.students = students; this.teacher = teacher; //調用私有方法來顯示錯誤 disp(); } //創(chuàng)建一個新的classroom對象 var c = new Classroom(["John", "Bob"], "Mr. Smith"); //調用disp方法會失敗,因為它不是該對象的公共屬性 c.disp();11.特權方法
特權方法用來指代哪些在查看并處理私有變量的同時允許用戶以公共方法的方式訪問的方法。
//創(chuàng)建一個新的User對象構造函數 function User(name, age) { //嘗試算出用戶出生的年份 var year = (new Date()).getFullYear() - age; //創(chuàng)建一個新的特權方法,能夠訪問year變量,同時自身屬于公共可訪問的 this.getYearBorn = function () { return year; } } //創(chuàng)建User對象的一個新示例 var user = new User("Bob", 44); //驗證返回的年份正確 alert(user.getYearBorn() == 1962); //注意我們無法訪問該對象私有的年份屬性 alert(user.year == null);12.靜態(tài)方法
靜態(tài)方法的實質與任何其他一般函數沒有什么不同,最主要的區(qū)別在于,其他函數是以對象的靜態(tài)屬性形式存在的。作為一個屬性,它們不能在該對象的實例的上下文中訪問,而只屬于主對象本身的那個上下文中。
//添加到一個User對象的靜態(tài)方法 User.clnoeUser = function (user) { //創(chuàng)建并返回一個新的用戶 return new User(user.getName(), user.getAge()); };13.原型式繼承的例子
//為Person對象創(chuàng)建一個構造函數 function Person(name) { this.name = name; } //給Person對象添加一個新方法 Person.prototype.getName = function () { return this.name; }; //創(chuàng)建一個新的User對象的構造函數 function User(name, password) { //注意,這里并沒有支持方法的重載/集成,也就是說,不能調用父類的構造函數 this.name = name; this.password = password; } //User對象繼承所有Person對象的方法 User.prototype = new Person(); //我們添加一個新方法到User對象中 User.prototype.getPassword = function () { return this.password; };14.JavaScript中的命名空間化及其實現
//創(chuàng)建一個默認的、全局的命名空間 var YAHOO = {}; //使用對象設置一些子命名空間 YAHOO.util = {}; //創(chuàng)建最終命名空間,它包含一個值為函數的屬性 YAHOO.util.Event = { addEventListener: function () { } }; //調用某個具體命名空間中的函數 YAHOO.util.Event.addEventListener();
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79983.html
摘要:行的起始與結束以開頭的以結束的匹配若干字符之一匹配含有的單詞排除型字符組匹配除了到的任何數字用點號匹配任意字符加號表示之前緊鄰的的元素出現一次或者多次星號表示之前緊鄰的的元素出現任意多次,或者不出現問號表示可選項或任何空白字符例如 行的起始與結束 var reg = /^cat/; // 以cat 開頭的 var reg = /cat$/; // 以cat 結束的 匹配若干...
摘要:初級書單深入理解人評價作者徐濤出版社機械工業(yè)出版社出版年年月日贊回復添加到豆列來自豆瓣讀書響應式設計人評價作者出版社人民郵電出版社出版年年月日贊回復添加到豆列來自豆瓣讀書深入淺出中文版人評價作者馬勞克林出版社東南大學出版社出版年年月 初級書單 深入理解Bootstrap 7.0 (65人評價)作者: 徐濤 出版社: 機械工業(yè)出版社 出版年: 2014-52015年1月19日 贊 回復添...
摘要:初級書單深入理解人評價作者徐濤出版社機械工業(yè)出版社出版年年月日贊回復添加到豆列來自豆瓣讀書響應式設計人評價作者出版社人民郵電出版社出版年年月日贊回復添加到豆列來自豆瓣讀書深入淺出中文版人評價作者馬勞克林出版社東南大學出版社出版年年月 初級書單 深入理解Bootstrap 7.0 (65人評價)作者: 徐濤 出版社: 機械工業(yè)出版社 出版年: 2014-52015年1月19日 贊 回復添...
摘要:初級書單深入理解人評價作者徐濤出版社機械工業(yè)出版社出版年年月日贊回復添加到豆列來自豆瓣讀書響應式設計人評價作者出版社人民郵電出版社出版年年月日贊回復添加到豆列來自豆瓣讀書深入淺出中文版人評價作者馬勞克林出版社東南大學出版社出版年年月 初級書單 深入理解Bootstrap 7.0 (65人評價)作者: 徐濤 出版社: 機械工業(yè)出版社 出版年: 2014-52015年1月19日 贊 回復添...
摘要:第條盡量少使用全局對象避免聲明全局變量盡量聲明局部變量避免對全局變量增加屬性第條始終聲明局部變量第條避免使用語句第條熟練使用閉包的函數值包含了比調用他們時執(zhí)行所需要的代碼還要更多的信息。那些在其所涵蓋的作用域內跟蹤變量的函數稱為閉包。 書還沒看完。一遍看,一遍寫讀書筆記。 這本書的序是JavaScript之父Brendan Eich寫的,作者是JavaScript標準化委員會專家。可想...
閱讀 1972·2019-08-30 15:54
閱讀 3596·2019-08-29 13:07
閱讀 3124·2019-08-29 12:39
閱讀 1789·2019-08-26 12:13
閱讀 1547·2019-08-23 18:31
閱讀 2159·2019-08-23 18:05
閱讀 1844·2019-08-23 18:00
閱讀 1043·2019-08-23 17:15