Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
言:在前端開發中,this簡直是又愛又恨的存在。this的確很強大,可以快速獲取到對象,但往往一不小心,就獲取不到想要的對象。那么this到底怎么使用呢?
在JavaScript「ES5」中,this的指代和其定義位置無關,只和其調用位置有關
不同的調用位置則this就代表不同的對象,但始終有個大原則:this指代的永遠是當前對象
接下來我們一起看看,開發過程中this到底有哪幾種情況呢?
this在普通函數中調用,this指代全局對象window
// 全局變量
let name = '元歌'
function demo(){
// 局部變量
let name = '孫尚香';
console.log(name);//孫尚香 優先使用局部變量
console.log(this.name);//元歌 ---此時this指代的是window對象 this.name則相當于獲取window.name的值
}
demo()
this指代當前對象,這也是最重要的一種使用方法
let obj = {
name:'翠花',
age:18,
say:function(){
// console.log(this==obj)//true
// console.log(this===obj)//true
console.log(this.name+'今年芳齡:'+this.age)//推薦
}
}
obj.say();
<div id="box" onclick="changeColor(this)"></div>
function changeColor(obj){
obj.style.background = 'pink'
}
this作為實參傳入函數內,此時this則代表當前觸發事件的元素
let oLi = document.querySelectorAll'li');
for(let i=0;i<oLi.length;i++){
// 函數會優先加載,但是只有在js偵測到點擊時再觸發
oLi[i].onclick = function(){
this.style.background = 'orange'
}
}
this此時代表當前點擊的對象
let li = document.querySelectorAll('li');
for(let i=0;i<li.length;i++){
li[i].onclick = function(){
// 將this賦值給一個變量或者一個對象的屬性,使其能夠在普通函數內使用
// (行業習慣使用that _this )
let that = this;
// 使用定時器,過1秒改變h2的內容
//小心在時間內函數的調用,比如:setTimeout setInterval forEach
setTimeout(function(){
console.log(this)//this當前指代的是window,因為再普通函數中調用
that.innerHTML = '待陽光明媚,我們出門可好';
},1000)
}
}
當然,如果掌握ES6箭頭函數的小伙伴,也可以將其轉換為箭頭函數
let li = document.querySelectorAll('li');
for(let i=0;i<li.length;i++){
li[i].onclick = function(){
setTimeout(() => {
console.log(this)//this當前點擊對象
this.innerHTML = '待陽光明媚,我們出門可好';
},1000)
}
}
// 自定義構造函數
function test(){
this.name = '張三';
this.age = 18;
this.play = function(){
console.log(this.name+'說:源碼學習氛圍真好!')
}
}
// this在構造函數中被調用時,this指代的是實例化的對象obj
let message = new test()
console.log(message)//{name: "張三", age: 18}
console.log(message.name);//張三
message.play();//張三說:源碼學習氛圍真好
源:人民日報
正在舉行的第五屆中國國際進口博覽會,吸引來自127個國家和地區的企業參展,“高精尖”創新產品與“小而美”特色產品共同亮相。各方共同書寫一個個開放合作、共贏發展的故事,生動詮釋了中國以實際行動落實全球發展倡議、推動全球共同發展的大國擔當。
“為中國消費者提供更豐富的選擇”
菲律賓的超甜蕉、金菠蘿,比利時的紅啤梨,泰國的香水椰……都樂亞洲控股私人有限公司的展臺上,一個巨大的“水果星球”吸引眾多觀眾駐足。連續5年參展,都樂公司持續把全球優質水果引進中國市場。今年,公司把剛剛引進中國市場的肯尼亞牛油果擺在展臺顯眼位置。
“當得知肯尼亞鮮食牛油果獲準進入中國市場時,作為進口水果經銷商,我們非常興奮,第一時間與肯尼亞當地農場和包裝廠溝通,探討挖掘肯尼亞牛油果在中國的市場潛力。”都樂公司相關負責人王娜表示,“希望借助進博會強大的溢出效應,為中國消費者提供更豐富的選擇。”
牛油果是肯尼亞重要的出口農產品。今年8月,4個裝滿牛油果的集裝箱從肯尼亞利穆魯鎮的桑瑞普工廠出發,運往中國的北京、上海、廣州等城市。這是非洲鮮食牛油果首次出口中國。消息傳開后,當地民眾種植牛油果的熱情高漲。肯尼亞牛油果協會首席執行官歐內斯特·穆托米表示:“中國擁有龐大的市場,會讓肯尼亞成千上萬的牛油果種植戶受益。”
“這幾天,家樂福等知名合作商聞訊而來,對進博會上展出的肯尼亞牛油果非常感興趣。我們正在積極發送樣品,測試貨架期。如果順利,后續的銷量預計會非常可觀。”王娜說。
從今年1月中肯簽署肯尼亞鮮食鱷梨(牛油果)輸華議定書,到6月中國海關總署允許符合檢疫要求的肯尼亞鮮食牛油果出口至中國;從8月鮮食牛油果從肯尼亞發往中國,到肯尼亞牛油果在本屆進博會上成功展出……肯尼亞牛油果的進博之旅,成為中國堅定不移擴大對外開放,實現互利共贏的生動體現。
“在中國市場發現更多發展機遇”
為支持最不發達國家參展,歷屆進博會都為最不發達國家企業提供免費攤位,以更好幫助這些國家推廣當地特色食品、傳統工藝和旅游文化。今年,來自最不發達國家的企業簽約使用免費攤位數量比上屆進博會增加近一倍。
來自幾內亞比紹的腰果今年首次在進博會上展出。盡管沒有精美的包裝,擺在展臺上的一袋袋飽滿的腰果還是吸引了不少客商詢問。
腰果出口是幾內亞比紹大部分農民的主要收入來源。“農業合作可以為當地民眾帶來實實在在的好處。我們希望借助進博會平臺,幫助當地農戶推銷土特產。如果幾內亞比紹的腰果能夠直接出口中國,當地民眾的收入預計將大幅提高。”幾內亞比紹中國貿易商會副會長吳詠濤說。
幾內亞比紹駐華大使安東尼奧·塞里弗·恩巴洛在接受記者采訪時表示,進博會提供了一個很好的機會,讓幾內亞比紹可以展示腰果這一主要出口產品。我們希望借此吸引更多投資者,幫助當地民眾增加就業,并實現技術更新和產業升級。
同樣是首次參加進博會,全巴基斯坦商業出口商協會參展商的名片上寫著這樣一句話:“期望此次巴基斯坦展區不僅能促進兩國經濟發展、貿易往來,更成為兩國友好關系的見證。”祖母綠寶石、喜馬拉雅鹽、巴斯馬蒂大米……手掌大小的宣傳冊上,對這些產品的介紹別具特色。
全巴基斯坦商業出口商協會參展商負責人繆嵐告訴記者,申請到展位后,他們第一時間聯系了巴基斯坦駐華使領館,請其推薦巴基斯坦的特色產品。“希望巴基斯坦企業能夠通過進博會在中國市場發現更多發展機遇。”
“帶動大家一起致富”
與進博會舉辦地國家會展中心(上海)僅一條馬路之隔,坐落著2018年設立的進博會常年交易服務平臺——綠地全球商品貿易港。在貿易港二樓,有一家阿富汗進口商品館,主要銷售阿富汗手工羊毛地毯。店主名叫阿里·法伊茲,來自阿富汗首都喀布爾。
今年是阿里連續第三年參加進博會,他帶來了阿富汗的松子、葡萄干、石榴、藏紅花等特色產品。除在消費品展區有展位外,他還在食品及農業展區申請了展位,展位面積越來越大,聘用的員工也從去年的5人增加到了今年的11人。
接受采訪期間,阿里頻繁接到洽談生意的電話,不時有觀眾前來詢問羊毛地毯的價格。“有一位客戶看了有關我們的報道,第一時間就來買走了最大的一塊地毯。”阿里說,這塊地毯的銷售所得幾乎相當于四五個阿富汗地毯編織工人家庭一年的總開銷。
阿里的展臺上今年還多了兩個十分顯眼的透明櫥窗,里面展示著精美的傳統工藝品。這是阿里從阿富汗僅有的一家青金石盤工廠收來的。“這些阿富汗傳統工藝品很珍貴,工廠主卻無法找到好的銷路。得知我可以把產品帶到中國,這位工廠主滿懷期待地把這些傳統工藝品交給了我。”阿里說。
與阿里一樣借助進博會平臺幫助本國民眾增收的,還有來自尼泊爾的參展商弗蘭克。2020年首次參加進博會,弗蘭克就看到了中國市場的廣闊商機。“我以前去過很多國家參展。參加進博會后,我就不必東奔西跑推銷產品了,這里可以聯系到很多客戶和生產廠家,帶動大家一起致富。”
第四屆進博會后,弗蘭克在綠地全球商品貿易港開了自己的店。弗蘭克介紹,他的企業與尼泊爾當地的一家手工編織廠合作,雇用了600多名女工,工人月收入可折合3000多元人民幣。“我們希望把更多尼泊爾產品帶到中國,幫助更多尼泊爾民眾增加收入。”
進博會日益讓中國市場成為世界的市場、共享的市場、大家的市場。正是因為有了進博會,阿里和弗蘭克的生意越來越好,帶動本國更多民眾共創美好生活。
《 人民日報 》( 2022年11月10日 第 03 版)
該方法用于檢測給出的日期是否有效:
const isDateValid = (...val) => !Number.isNaN(new Date(...val).valueOf());
isDateValid("December 17, 1995 03:24:00"); // true
復制代碼
該方法用于計算兩個日期之間的間隔時間:
const dayDif = (date1, date2) => Math.ceil(Math.abs(date1.getTime() - date2.getTime()) / 86400000)
dayDif(new Date("2021-11-3"), new Date("2022-2-1")) // 90
復制代碼
距離過年還有90天~
該方法用于檢測給出的日期位于今年的第幾天:
const dayOfYear = (date) => Math.floor((date - new Date(date.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24);
dayOfYear(new Date()); // 307
復制代碼
2021年已經過去300多天了~
該方法可以用于將時間轉化為hour:minutes:seconds的格式:
const timeFromDate = date => date.toTimeString().slice(0, 8);
timeFromDate(new Date(2021, 11, 2, 12, 30, 0)); // 12:30:00
timeFromDate(new Date()); // 返回當前時間 09:00:00
復制代碼
該方法用于將英文字符串的首字母大寫處理:
const capitalize = str => str.charAt(0).toUpperCase() + str.slice(1)
capitalize("hello world") // Hello world
復制代碼
該方法用于將一個字符串進行翻轉操作,返回翻轉后的字符串:
const reverse = str => str.split('').reverse().join('');
reverse('hello world'); // 'dlrow olleh'
復制代碼
該方法用于生成一個隨機的字符串:
const randomString = () => Math.random().toString(36).slice(2);
randomString();
復制代碼
該方法可以從指定長度處截斷字符串:
const truncateString = (string, length) => string.length < length ? string : `${string.slice(0, length - 3)}...`;
truncateString('Hi, I should be truncated because I am too loooong!', 36) // 'Hi, I should be truncated because...'
復制代碼
該方法用于去除字符串中的HTML元素:
const stripHtml = html => (new DOMParser().parseFromString(html, 'text/html')).body.textContent || '';
復制代碼
該方法用于移除數組中的重復項:
const removeDuplicates = (arr) => [...new Set(arr)];
console.log(removeDuplicates([1, 2, 2, 3, 3, 4, 4, 5, 5, 6]));
復制代碼
該方法用于判斷一個數組是否為空數組,它將返回一個布爾值:
const isNotEmpty = arr => Array.isArray(arr) && arr.length > 0;
isNotEmpty([1, 2, 3]); // true
復制代碼
可以使用下面兩個方法來合并兩個數組:
const merge = (a, b) => a.concat(b);
const merge = (a, b) => [...a, ...b];
復制代碼
該方法用于判斷一個數字是奇數還是偶數:
const isEven = num => num % 2 === 0;
isEven(996);
復制代碼
const average = (...args) => args.reduce((a, b) => a + b) / args.length;
average(1, 2, 3, 4, 5); // 3
復制代碼
該方法用于獲取兩個整數之間的隨機整數
const random = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);
random(1, 50);
復制代碼
該方法用于將一個數字按照指定位進行四舍五入:
const round = (n, d) => Number(Math.round(n + "e" + d) + "e-" + d)
round(1.005, 2) //1.01
round(1.555, 2) //1.56
復制代碼
該方法可以將一個RGB的顏色值轉化為16進制值:
const rgbToHex = (r, g, b) => "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
rgbToHex(255, 255, 255); // '#ffffff'
復制代碼
該方法用于獲取一個隨機的十六進制顏色值:
const randomHex = () => `#${Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, "0")}`;
randomHex();
復制代碼
該方法使用 navigator.clipboard.writeText 來實現將文本復制到剪貼板:
const copyToClipboard = (text) => navigator.clipboard.writeText(text);
copyToClipboard("Hello World");
復制代碼
該方法可以通過使用 document.cookie 來訪問 cookie 并清除存儲在網頁中的所有 cookie:
const clearCookies = document.cookie.split(';').forEach(cookie => document.cookie = cookie.replace(/^ +/, '').replace(/=.*/, `=;expires=${new Date(0).toUTCString()};path=/`));
復制代碼
該方法通過內置的 getSelection 屬性獲取用戶選擇的文本:
const getSelectedText = () => window.getSelection().toString();
getSelectedText();
復制代碼
該方法用于檢測當前的環境是否是黑暗模式,它是一個布爾值:
const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
console.log(isDarkMode)
復制代碼
該方法用于在頁面中返回頂部:
const goToTop = () => window.scrollTo(0, 0);
goToTop();
復制代碼
該方法用于檢測當前標簽頁是否已經激活:
const isTabInView = () => !document.hidden;
復制代碼
該方法用于檢測當前的設備是否是蘋果的設備:
const isAppleDevice = () => /Mac|iPod|iPhone|iPad/.test(navigator.platform);
isAppleDevice();
復制代碼
該方法用于判斷頁面是否已經底部:
const scrolledToBottom = () => document.documentElement.clientHeight + window.scrollY >= document.documentElement.scrollHeight;
復制代碼
該方法用于重定向到一個新的URL:
const redirect = url => location.href = url
redirect("https://www.google.com/")
復制代碼
該方法用于打開瀏覽器的打印框:
const showPrintDialog = () => window.print()
復制代碼
該方法可以返回一個隨機的布爾值,使用Math.random()可以獲得0-1的隨機數,與0.5進行比較,就有一半的概率獲得真值或者假值。
const randomBoolean = () => Math.random() >= 0.5;
randomBoolean();
復制代碼
可以使用以下形式在不適用第三個變量的情況下,交換兩個變量的值:
[foo, bar] = [bar, foo];
復制代碼
該方法用于獲取一個變量的類型:
const trueTypeOf = (obj) => Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
trueTypeOf(''); // string
trueTypeOf(0); // number
trueTypeOf(); // undefined
trueTypeOf(null); // null
trueTypeOf({}); // object
trueTypeOf([]); // array
trueTypeOf(0); // number
trueTypeOf(() => {}); // function
復制代碼
該方法用于攝氏度和華氏度之間的轉化:
const celsiusToFahrenheit = (celsius) => celsius * 9/5 + 32;
const fahrenheitToCelsius = (fahrenheit) => (fahrenheit - 32) * 5/9;
celsiusToFahrenheit(15); // 59
celsiusToFahrenheit(0); // 32
celsiusToFahrenheit(-20); // -4
fahrenheitToCelsius(59); // 15
fahrenheitToCelsius(32); // 0
復制代碼
該方法用于檢測一個JavaScript對象是否為空:
const isEmpty = obj => Reflect.ownKeys(obj).length === 0 && obj.constructor === Object;
*請認真填寫需求信息,我們會在24小時內與您取得聯系。