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