首頁(yè)

JavaScript 中對(duì)象的深拷貝

藍(lán)藍(lán)設(shè)計(jì)的小編

在JavaScript中,對(duì)對(duì)象進(jìn)行拷貝的場(chǎng)景比較常見。但是簡(jiǎn)單的復(fù)制語(yǔ)句只能對(duì)對(duì)象進(jìn)行淺拷貝,即復(fù)制的是一份引用,而不是它所引用的對(duì)象。而更多的時(shí)候,我們希望對(duì)對(duì)象進(jìn)行深拷貝,避免原始對(duì)象被無(wú)意修改。

對(duì)象的深拷貝與淺拷貝的區(qū)別如下:

  • 淺拷貝:僅僅復(fù)制對(duì)象的引用,而不是對(duì)象本身;
  • 深拷貝:把復(fù)制的對(duì)象所引用的全部對(duì)象都復(fù)制一遍。

一. 淺拷貝的實(shí)現(xiàn)

淺拷貝的實(shí)現(xiàn)方法比較簡(jiǎn)單,只要使用是簡(jiǎn)單的復(fù)制語(yǔ)句即可。

1.1 方法一:簡(jiǎn)單的復(fù)制語(yǔ)句

/* ================ 淺拷貝 ================ */ function simpleClone(initalObj) { var obj = {}; for ( var i in initalObj) {
        obj[i] = initalObj[i];
    } return obj;
}

設(shè)計(jì)師最重要的能力-自學(xué)

藍(lán)藍(lán)設(shè)計(jì)的小編

如何才能有效的自學(xué)?

你細(xì)心的話,應(yīng)該注意到上面我的用詞,這些關(guān)鍵點(diǎn)就是有效自學(xué)的途徑。在設(shè)計(jì)這個(gè)行當(dāng),光努力是不夠的,我們不只是要強(qiáng)調(diào)效率,也要強(qiáng)調(diào)效能。回過(guò)來(lái)看,你們學(xué)校歷史中是不是總有那么幾個(gè)無(wú)論如何努力都始終分?jǐn)?shù)不高的貨色?

首先是合適的時(shí)間,如果一件需要花時(shí)間的學(xué)習(xí)任務(wù)超出了你的時(shí)間成本,你就不應(yīng)該去碰它,或者換一個(gè)更好的方式,比如:你現(xiàn)在是一個(gè)從事了8年平面設(shè)計(jì)的設(shè)計(jì)師,你覺得目前做動(dòng)畫的收入高,你希望通過(guò)自學(xué)動(dòng)畫然后跨行到這個(gè)領(lǐng)域,那么未必是最好的選擇,首先你的8年的平面經(jīng)驗(yàn)幾乎沒有再升值的空間,其次作為一個(gè)新人,也許你還要3年的等待,好死不死,你的腦子不錯(cuò),等到你學(xué)有所成,動(dòng)畫行業(yè)又是另一個(gè)新的天地了。

正確的方法是重要的,方法不僅是你練習(xí)的方式,還有思考問(wèn)題的方式,這里強(qiáng)調(diào)的是設(shè)計(jì)師快速發(fā)現(xiàn)問(wèn)題的能力,只有準(zhǔn)確的了解需要自學(xué)的領(lǐng)域的難度,行業(yè)標(biāo)準(zhǔn),設(shè)計(jì)思路,應(yīng)用形態(tài),你才知道從何入手,比如:你想自學(xué)網(wǎng)頁(yè)設(shè)計(jì),并把網(wǎng)頁(yè)視覺設(shè)計(jì)師作為自己的職業(yè)發(fā)展,你就應(yīng)該首先了解,一個(gè)網(wǎng)站的基本結(jié)構(gòu),每個(gè)結(jié)構(gòu)需要哪些工作崗位,他們的職責(zé)有何不同,一個(gè)網(wǎng)站視覺設(shè)計(jì)師應(yīng)該干什么,抓住重點(diǎn)。(而不要一開始去學(xué)什么HTML代碼,那不是你最該關(guān)心的,我這話是說(shuō)給某個(gè)朋友聽的)

JavaScript世界萬(wàn)物誕生記

藍(lán)藍(lán)設(shè)計(jì)的小編

一. 無(wú)中生有

起初,什么都沒有。

1.png

 

造物主說(shuō):沒有東西本身也是一種東西啊,于是就有了null:

現(xiàn)在我們要造點(diǎn)兒東西出來(lái)。但是沒有原料怎么辦?

有一個(gè)聲音說(shuō):不是有null嘛?

另一個(gè)聲音說(shuō):可是null代表無(wú)啊。

造物主說(shuō):那就無(wú)中生有吧!

于是:

2.png

設(shè)計(jì)溝通的七條經(jīng)驗(yàn)

藍(lán)藍(lán)設(shè)計(jì)的小編

實(shí)際工作中,我們每天也花大量時(shí)間在開各種會(huì),各種討論上。溝通的效率和效果都直接影響著最后產(chǎn)出的質(zhì)量。但在我們看最終的工作結(jié)果的時(shí)候,溝通作為過(guò)程反而不那么直觀,很難去評(píng)價(jià)和衡量。我試著列舉設(shè)計(jì)溝通中容易犯的一些錯(cuò)誤,并總結(jié)了7條經(jīng)驗(yàn),希望對(duì)同樣在思考這些問(wèn)題的同學(xué)有些幫助。下文主要拿產(chǎn)品經(jīng)理和設(shè)計(jì)師之間的矛盾沖突來(lái)舉例。


1. 避免雞同鴨講


雙方都在說(shuō)自己的道理,卻不聽對(duì)方是怎么講的;或者因?yàn)闇贤p方無(wú)法說(shuō)出真實(shí)的想法,導(dǎo)致溝通停留在表面上無(wú)法深入。這兩種情況下,溝通效率都很低,而且很難達(dá)成共識(shí)得到結(jié)果。


比如我有一次看到,產(chǎn)品經(jīng)理在和設(shè)計(jì)師爭(zhēng)執(zhí),一個(gè)在講運(yùn)營(yíng)的事情,一個(gè)在講設(shè)計(jì)規(guī)范的事情,都在嘗試著告訴對(duì)方,從自己的專業(yè)角度來(lái)看,這個(gè)事情應(yīng)該怎么做。討論幾乎無(wú)法進(jìn)行下去,因?yàn)檎l(shuí)也不肯讓步。這種溝通效率是很低的,雙方壓根就沒有站在同一個(gè)層面講問(wèn)題,設(shè)計(jì)師不懂運(yùn)營(yíng),產(chǎn)品經(jīng)理不懂設(shè)計(jì)。


這種情況在新人身上更常見,因?yàn)樾氯藙傔M(jìn)入工作崗位,只了解自己的專業(yè)和工作內(nèi)容,還不太理解別的團(tuán)隊(duì)中其他成員的目標(biāo)和立場(chǎng),很容易出現(xiàn)雞同鴨講的情況。當(dāng)發(fā)現(xiàn)自己和對(duì)方講的不是一個(gè)層面的東西時(shí),及時(shí)找有經(jīng)驗(yàn)的同事來(lái)幫助溝通會(huì)是行之有效的辦法。


另一種情況也很常見,就是溝通的其中一方不愿意或者不知道怎么說(shuō)出自己真實(shí)的想法。如一個(gè)產(chǎn)品經(jīng)理一定要設(shè)計(jì)師改一個(gè)東西,設(shè)計(jì)師怎么解釋也沒用,請(qǐng)來(lái)了有經(jīng)驗(yàn)的同事看,也覺得這里其實(shí)不用改。溝通到最后才發(fā)現(xiàn),原來(lái)是產(chǎn)品的老大說(shuō)要這么改,產(chǎn)品經(jīng)理在老大面前答應(yīng)了要改,所以就跑來(lái)設(shè)計(jì)師這里軟磨硬泡。產(chǎn)品經(jīng)理如果可以從一開始就告訴設(shè)計(jì)師,這個(gè)需求是來(lái)自某某,我堅(jiān)持是因?yàn)槲掖饝?yīng)某某說(shuō)肯定可以改掉的,整個(gè)溝通就不需要耗這么久了,因?yàn)橹灰堰@個(gè)某某也卷入一起討論就可以搞定了。


設(shè)計(jì)師需要掌握更多跨專業(yè)知識(shí),理解不同職位的立場(chǎng);學(xué)會(huì)講自己內(nèi)心真實(shí)的想法,挖掘?qū)Ψ降谋硎霰澈笳鎸?shí)的含義。只有當(dāng)設(shè)計(jì)在同一層面上時(shí),才能做更有效率的溝通。

更快學(xué)習(xí)JS的6個(gè)簡(jiǎn)單思維技巧

藍(lán)藍(lán)設(shè)計(jì)的小編

當(dāng)人們嘗試學(xué)習(xí) JavaScript , 或者其他編程技術(shù)的時(shí)候,常常會(huì)遇到同樣的挑戰(zhàn):

  • 有些概念容易混淆,特別是當(dāng)你學(xué)習(xí)過(guò)其他語(yǔ)言的時(shí)候。
  • 很難找到學(xué)習(xí)的時(shí)間(有時(shí)候是動(dòng)力)。
  • 一旦當(dāng)你理解了一些東西的時(shí)候,卻很容易再一次忘記。
  • 可以使用的工具甚多且經(jīng)常變化,所以不知道從哪里開始入手。

幸運(yùn)的是,這些挑戰(zhàn)最終都可以被戰(zhàn)勝。在這篇文章里,我將介紹 6 個(gè)思維技巧來(lái)幫你更快的學(xué)習(xí) JavaScript ,讓你成為一個(gè)更快樂(lè)更多產(chǎn)的程序員。

對(duì)于很多學(xué)習(xí) JavaScript 的人來(lái)說(shuō),他們問(wèn)的第一個(gè)問(wèn)題是選用哪個(gè)框架(現(xiàn)有框架非常多)。但是如果你還不熟悉原生的 JavaScript ,那這就是個(gè)不該問(wèn)的問(wèn)題。你會(huì)花費(fèi)你全部的時(shí)間去查詢不同的框架并且不會(huì)取得任何進(jìn)展。

詳解JS 變量、作用域及內(nèi)存

藍(lán)藍(lán)設(shè)計(jì)的小編

基本類型值有:undefined,NUll,Boolean,Number和String,這些類型分別在內(nèi)存中占有固定的大小空間,他們的值保存在棧空間,我們通過(guò)按值來(lái)訪問(wèn)的。

 

1)值類型:數(shù)值、布爾值、null、undefined。
2)引用類型:對(duì)象、數(shù)組、函數(shù)。
 
如果賦值的是引用類型的值,則必須在堆內(nèi)存中為這個(gè)值分配空間。由于這種值的大小不固定(對(duì)象有很多屬性和方法),因此不能把他們保存到棧內(nèi)存中。但內(nèi)存地址大小是固定的,因此可以將內(nèi)存地址保存在棧內(nèi)存中。
 
<script type="text/javascript”>
var box = new Object();  //創(chuàng)建一個(gè)引用類型
var box = "trigkit4";   //基本類型值是字符串
box.age = 21;    //基本類型值添加屬性很怪異,因?yàn)橹挥袑?duì)象才可以添加屬性。
alert(box.age);  //不是引用類型,無(wú)法輸出;
</script>
 

設(shè)計(jì)師成長(zhǎng)要經(jīng)歷的五步

藍(lán)藍(lán)設(shè)計(jì)的小編

第三步:他開始關(guān)注生活投入生活和研究生活,他變成了一個(gè)感情細(xì)膩,生活灑脫的人,他開始意識(shí)到自己的人格境界,自己的生活方式和感情表達(dá)方式加上生命的目的正是自己鮮明的面貌,他意識(shí)到自己正走向一種境界,真正屬于自己的形式語(yǔ)言和符號(hào)圍繞者這種狀態(tài)應(yīng)運(yùn)而生,思想不再被形式所控制,他的設(shè)計(jì)中,形式真正的作為一種為表達(dá)環(huán)境的精神空間服務(wù)的手段而變的不再?gòu)垞P(yáng)和膚淺。在一段時(shí)間的摸索,自己的理論體系逐漸清晰并成熟之后,他具備了一種能力,用自己的理論和人格面貌去影響自己的客戶和周圍的人,并且引導(dǎo)他們進(jìn)入那種境界。


第四步:這個(gè)時(shí)期的設(shè)計(jì)師是成熟和另人尊重的,因?yàn)樗呀?jīng)進(jìn)入了他的灰色時(shí)代。他開始走出工作室第一次去關(guān)注人,關(guān)注自然,開始不完全依賴材料市場(chǎng)而是向生活要材料,他意識(shí)到應(yīng)該注重自己的經(jīng)歷積累,戲劇化的人生概念使他為此振奮。他的作品變的更穩(wěn)定更嚴(yán)謹(jǐn)也更平淡,同時(shí)也具備了精神張力,這種精神狀態(tài)已經(jīng)淘去了浮躁的形式感而進(jìn)入了一種塵埃落定的心境,你會(huì)聽到時(shí)間流逝的聲音,和平靜的永恒的另人絕望而不可超越的幸福。這不是滄桑而是生活的最高境界。他征服客戶的方式不是眼花繚亂的形式手段而是心靈。


第五步:當(dāng)一個(gè)設(shè)計(jì)師具備了大量的優(yōu)秀案例,在社會(huì)上享有了崇高的聲譽(yù)和財(cái)富的時(shí)候,他開始憑著感覺和思想做事情。他已經(jīng)看穿了人間事故,無(wú)論他的生活和作品都是他本人的化身,社會(huì)上開始推崇他的理論和著作,他變成了一個(gè)博學(xué)的德高望重的思想家,他的思想已經(jīng)不僅僅對(duì)本行業(yè)具有指導(dǎo)意義,對(duì)很多其他的領(lǐng)域也具有杰出貢獻(xiàn),他對(duì)世界對(duì)人類對(duì)設(shè)計(jì)對(duì)自己的生涯已經(jīng)看的無(wú)比清晰和透徹,他進(jìn)入了設(shè)計(jì)師最高階段白色時(shí)代,這個(gè)階段的設(shè)計(jì)師是真正的大師,他們擁有不朽的人格。


如何讀懂并寫出裝逼的函數(shù)式代碼

藍(lán)藍(lán)設(shè)計(jì)的小編

今天在微博上看到了 有人分享了下面的這段函數(shù)式代碼,我把代碼貼到下面,不過(guò)我對(duì)原來(lái)的代碼略有改動(dòng),對(duì)于函數(shù)式的版本,咋一看,的確令人非常費(fèi)解,仔細(xì)看一下,你可能就暈掉了,似乎完全就是天書,看上去非常裝逼,哈哈。不過(guò),我感覺解析那段函數(shù)式的代碼可能會(huì)一個(gè)比較有趣過(guò)程,而且,我以前寫過(guò)一篇《函數(shù)式編程》的入門式的文章,正好可以用這個(gè)例子,再升華一下原來(lái)的那篇文章,順便可以向大家更好的介紹很多基礎(chǔ)知識(shí),所以寫下這篇文章。

先看代碼

這個(gè)代碼平淡無(wú)奇,就是從一個(gè)數(shù)組中找到一個(gè)數(shù),O(n)的算法,找不到就返回 null。

下面是正常的 old-school 的方式。不用多說(shuō)。

//正常的版本 function find (x, y) { for ( let i = 0; i < x.length; i++ ) { if ( x[i] == y ) return i;
  } return null;
} let arr = [0,1,2,3,4,5] console.log(find(arr, 2)) console.log(find(arr, 8))

其中之一和其中唯一(討論個(gè)人風(fēng)格,追求你的唯一?。?/a>

藍(lán)藍(lán)設(shè)計(jì)的小編

86ed0befte04726e9b8e9&690.jpg


通常

我們都會(huì)問(wèn)或被問(wèn)到以及自己?jiǎn)栕约海骸笆裁词呛玫脑O(shè)計(jì)”,這是一個(gè)沒有一定答案的問(wèn)題,雖沒有答案但是可以一直問(wèn)的問(wèn)題,換個(gè)角度“好的設(shè)計(jì)或者你喜歡的設(shè)計(jì)有怎樣的特點(diǎn)”,這篇文章講的是“其中之一和其中唯一”,那么好的設(shè)計(jì)就有“其中唯一”這個(gè)特點(diǎn)。

上面是一張示意圖,簡(jiǎn)單的比較“其中之一”和“其中唯一”,非常淺顯的含義,但我們目的并不是找到答案,而是尋找的過(guò)程,因?yàn)橥ǔ4鸢钢皇菍?duì)漫長(zhǎng)過(guò)程的一個(gè)敷衍,本身并沒有多大的價(jià)值。


HTML5手勢(shì)檢測(cè)原理和實(shí)現(xiàn)

藍(lán)藍(lán)設(shè)計(jì)的小編

前言

隨著 Hybrid 應(yīng)用的豐富,HTML5 工程師們已經(jīng)不滿足于把桌面端體驗(yàn)簡(jiǎn)單移植到移動(dòng)端,他們覬覦移動(dòng)原生應(yīng)用人性化的操作體驗(yàn),特別是原生應(yīng)用與生俱來(lái)的豐富的手勢(shì)系統(tǒng)。HTML5 沒有提供開箱即用的手勢(shì)系統(tǒng),但是提供了更底層一些的對(duì) touch 事件的監(jiān)聽?;诖?,我們可以做出自己的手勢(shì)庫(kù)。

手勢(shì)

常用的 HTML5 手勢(shì)可以分為兩類,單點(diǎn)手勢(shì)和兩點(diǎn)手勢(shì)。單點(diǎn)手勢(shì)有 tap(單擊),double tap(雙擊),long tap(長(zhǎng)按),swipe(揮),move(移動(dòng))。兩點(diǎn)手勢(shì)有 pinch(縮放),rotate(旋轉(zhuǎn))。

接下來(lái)我們實(shí)現(xiàn)一個(gè)檢測(cè)這些手勢(shì)的 javaScript 庫(kù),并利用這個(gè)手勢(shì)庫(kù)做出炫酷的交互效果。

1.jpg

日歷

鏈接

個(gè)人資料

存檔