首頁

JavaScript 中對象的深拷貝

藍藍設(shè)計的小編

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

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

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

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

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

1.1 方法一:簡單的復(fù)制語句

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

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

藍藍設(shè)計的小編

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

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

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

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

JavaScript世界萬物誕生記

藍藍設(shè)計的小編

一. 無中生有

起初,什么都沒有。

1.png

 

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

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

有一個聲音說:不是有null嘛?

另一個聲音說:可是null代表無啊。

造物主說:那就無中生有吧!

于是:

2.png

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

藍藍設(shè)計的小編

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


1. 避免雞同鴨講


雙方都在說自己的道理,卻不聽對方是怎么講的;或者因為溝通雙方無法說出真實的想法,導(dǎo)致溝通停留在表面上無法深入。這兩種情況下,溝通效率都很低,而且很難達成共識得到結(jié)果。


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


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


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


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

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

藍藍設(shè)計的小編

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

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

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

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

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

藍藍設(shè)計的小編

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

 

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

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

藍藍設(shè)計的小編

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


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


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


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

藍藍設(shè)計的小編

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

先看代碼

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

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

//正常的版本 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))

其中之一和其中唯一(討論個人風(fēng)格,追求你的唯一!)

藍藍設(shè)計的小編

86ed0befte04726e9b8e9&690.jpg


通常

我們都會問或被問到以及自己問自己:“什么是好的設(shè)計”,這是一個沒有一定答案的問題,雖沒有答案但是可以一直問的問題,換個角度“好的設(shè)計或者你喜歡的設(shè)計有怎樣的特點”,這篇文章講的是“其中之一和其中唯一”,那么好的設(shè)計就有“其中唯一”這個特點。

上面是一張示意圖,簡單的比較“其中之一”和“其中唯一”,非常淺顯的含義,但我們目的并不是找到答案,而是尋找的過程,因為通常答案只是對漫長過程的一個敷衍,本身并沒有多大的價值。


HTML5手勢檢測原理和實現(xiàn)

藍藍設(shè)計的小編

前言

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

手勢

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

接下來我們實現(xiàn)一個檢測這些手勢的 javaScript 庫,并利用這個手勢庫做出炫酷的交互效果。

1.jpg

日歷

鏈接

個人資料

藍藍設(shè)計的小編 http://m.sillybuy.com

存檔