React-Native基礎準備

1.React Native的優勢:

ReactNative 是FaceBook推出的一套可以基于目前大熱的開源JavaScript庫React.js來開發iOS和Android原生App的解決方案。Facebook已經在多項產品中使用了React Native,并且將持續地投入建設React Native。
React Native著力于提高多平臺開發的開發效率 —— 僅需學習一次,編寫任何平臺。(Learn once, write anywhere)。

與Hybird不同的是,ReactNative的渲染機制不是通過瀏覽器,而是在底層用原生繪制,所以在體驗上會比
Hybird的要好,但是又沒有純原生的好,所以還是有一定局限性。雖然如此,已經是一個很大的進步。和ReactNative的原理類似的還有Weex和Deviceone,Weex是由阿里開源,他們之前的區別可以進一步探索,這里就不做介紹了。
ReactNative體現的優勢是:
1.垮平臺
2.高效
3.熱更新

2.網頁前端編程基礎

2.1.HTML 是用來描述網頁的一種語言

HTML 指的是超文本標記語言 (Hyper Text Markup Language)
HTML 不是一種編程語言,而是一種標記語言 (markup language)
標記語言是一套標記標簽 (markup tag)
HTML 使用標記標簽來描述網頁

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>My First Heading</h1>

<p>My first paragraph.</p>
</body>
</html>

HTML 標簽
HTML 標記標簽通常被稱為 HTML 標簽 (HTML tag)。
HTML 標簽是由尖括號包圍的關鍵詞,比如 <html>
HTML 標簽通常是成對出現的,比如 < b> 和 < /b>
標簽對中的第一個標簽是開始標簽,第二個標簽是結束標簽
開始和結束標簽也被稱為開放標簽和閉合標簽

典型塊級元素與行內元素

1.塊元素(block element)
div
h(x) - 標題
p - 段落
table - 表格
ul - 非排序列表

2.內聯元素(inline element)
span - 常用內聯容器,定義文本內區塊
a - 錨點
i - 斜體
img - 圖片
input - 輸入框

3.行內、塊狀元素區別:
(1).塊級元素會獨占一行,其寬度自動填滿其父元素寬度,行內元素不會獨占一行,相鄰的行內元素會排列在同一行里,直到一行排不下,才會換行,其寬度隨元素的內容而變化;
(2). 一般情況下,塊級元素可以設置 width, height屬性,行內元素設置width, height無效(注意:塊級元素即使設置了寬度,仍然是獨占一行的);
(3).塊級元素可以設置margin 和 padding. 行內元素的水平方向的padding-left,padding-right,margin-left,margin-right 都產生邊距效果,但是豎直方向的padding-top,padding-bottom,margin-top,margin-bottom都不會產生邊距效果。(水平方向有效,豎直方向無效);

4.行內元素和塊狀元素的說明
根據CSS規范的規定,每一個網頁元素都有一個display屬性,用于確定該元素的類型,每一個元素都有默認的display屬性值,比如div元素,它的默認display屬性值為“block”,成為“塊級”元素(block-level);而span元素的默認display屬性值為“inline”,稱為“行內”元素。div這樣的塊級元素,就會自動占據一定矩形空間,可以通過設置高度、寬度、內外邊距等屬性,來調整的這個矩形的樣子;與之相反,像“span”“a”這樣的行內元素,則沒有自己的獨立空間,它是依附于其他塊級元素存在的,因此,對行內元素設置高度、寬度、內外邊距等屬性,都是無效的。

2.2.CSS

層疊樣式表
層疊樣式表(英文全稱:Cascading Style Sheets)是一種用來表現HTML(標準通用標記語言的一個應用)或XML(標準通用標記語言的一個子集)等文件樣式的計算機語言。CSS不僅可以靜態地修飾網頁,還可以配合各種腳本語言動態地對網頁各元素進行格式化。

h1 {color:red; font-size:14px;}

盒子模型
CSS中, Box Model叫盒子模型(或框模型),Box Model規定了元素框處理元素內容(element content)、內邊距(padding)、邊框(border) 和 外邊距(margin) 的方式。在HTML文檔中,每個元素(element)都有盒子模型,所以說在Web世界里(特別是頁面布局),Box Model無處不在。下面是Box Model的圖示:

CSS盒子模型.png

說明:
上圖中,由內而外依次是元素內容(content)、內邊矩(padding-top、padding-right、padding- bottom、padding-left)、邊框(border-top、border-right、border-bottom、border- left)和外邊距(marging-top、margin-right、margin-bottom、margin-left)。
內邊距、邊框和外邊距可以應用于一個元素的所有邊,也可以應用于單獨的邊。而且,外邊距可以是負值,而且在很多情況下都要使用負值的外邊距。

下圖是W3School的Box Model 圖解:

W3School-Box Model

2.3.Javascript

JavaScript一種直譯式腳本語言,是一種動態類型、弱類型的語言。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用于客戶端的腳本語言,最早是在HTML網頁上使用,用來給HTML網頁增加動態功能。
在1995年時,由Netscape公司的Brendan Eich,在網景導航者瀏覽器上首次設計實現而成。因為Netscape與Sun合作,Netscape管理層希望它外觀看起來像Java,因此取名為JavaScript。但實際上它的語法風格與Self及Scheme較為接近。
為了取得技術優勢,微軟推出了JScript,CEnvi推出ScriptEase,與JavaScript同樣可在瀏覽器上運行。為了統一規格,因為JavaScript兼容于ECMA標準,因此也稱為ECMAScript。
直譯語言(Interpreted language),又稱直譯式語言,是一種編程語言,它不需要經過編譯器先行編譯為機器碼,之后直接在CPU中執行,相反的,這種編程語言需要通過直譯器,在執行期動態直譯(interpreted)

JavaScript 數據類型
JavaScript 擁有動態類型。這意味著相同的變量可用作不同的類型:

var x             // x 為 undefined
var x = 6;         // x 為數字
var x = "Bill";      // x 為字符串

字符串
字符串是存儲字符(比如 "Bill Gates")的變量。
字符串可以是引號中的任意文本。您可以使用單引號或雙引號:

var carname="Bill Gates";
var carname='Bill Gates';

數字
JavaScript 只有一種數字類型。數字可以帶小數點,也可以不帶:

var x1=34.00;      //使用小數點來寫
var x2=34;        //不使用小數點來寫

布爾
布爾(邏輯)只能有兩個值:true 或 false。

var x=true
var y=false

數組
下面的代碼創建名為 cars 的數組:

var cars=new Array();
cars[0]="Audi";
cars[1]="BMW";
cars [2] ="Volvo";

或者 (condensed array):

vary cars=new Array("Audi","BMW","Volvo");

或者 (literal array):

var cars=["Audi","BMW","Volvo"];

對象
對象由花括號分隔。在括號內部,對象的屬性以名稱和值對的形式 (name : value) 來定義。屬性由逗號分隔:
var person={firstname:"Bill", lastname:"Gates", id:5566};
對象屬性有兩種尋址方式:
實例

name=person.lastname;
name=person["lastname"];

Undefined 和 Null
Undefined 這個值表示變量不含有值。
可以通過將變量的值設置為 null 來清空變量。

typeof
可以使用typeof操作符檢測變量的數據類型

類型 結果
Undefined "undefined"
Null "object"
Boolean "boolean"
Number "number"
String "string"
函數對象 ( [[Call]] 在ECMA-262條款中實現了) "function"
任何其他對象 "object"

JavaScript中number、string、boolean、null和undefined型數據都是值類型,由于值類型數據占據的空間都是固定的,所以可以把它們存儲在狹窄的內存棧。object、function和array等對象都是引用型數據

創建對象的方式

Object
var p = new Object();
p.name = "jack";
p.age = 20;
p.sayName = function(){
    alert(this.name);
}

字面量
var p = {name:"jack",age:20,sayName:function(){alert(this.name);}};

工廠模式:

function createPerson(name,age){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.sayName = function(){
        console.log(this.name);
    }
    return o;
}

var c = createPerson("jason",30);

構造函數:

function Person(name,age){
    this.name = name;
    this.age = age;
    this.sayName = function(){
        alert(this.name);
    }
}

var p = new Person("jack",20);
alert(p instanceof Person);

構造函數的不同之處:
沒有顯示的創建對象
直接將屬性和方法賦給了this對象
沒有return語句

構造函數的問題:
每個函數都在每個實例上重新創建一遍,person1和person2都有一個名為sayName的函數,但是兩個sayName函數是兩個不同的Function實例

原型模式:

function Person(){

}

Person.prototype.name = "jack";
Person.prototype.age = 20;
Person.prototype.sayName = function(){
    alert(this.name);
}

var p = new Person();
p.sayName();

理解原型對象prototype
我們創建的每個函數都有一個prototype屬性,這個屬性是一個指針,指向一個對象,而這個對象的用途是包含可以由特定類型的所有實例共享的屬性和方法。

原型對象prototype.png

如何實現繼承
Javascript實現繼承主要依靠原型鏈:

原型鏈.png

function SuperType(){
    this.colors = ["red","green","blue"];
}

function SubType(){
}
//繼承了SuperType
SubType.prototype = new SuperType();

var instance1 = new SubType();
instance1.colors.push("white");
alert(instance1.colors);

var instance2 = new SubType();
alert(instance2.colors);

上面的代碼中,我們沒有使用SubType默認提供的原型,而是給它換了一個新原型,這個新原型就是SuperType的實例。于是,新原型不僅具有作為一個SuperType的實例所有擁有的全部屬性和方法,而且其內部還有一個指針,指向了SuperType的原型。

原型鏈的問題:
當原型包含引用類型的屬性時,這些屬性會被所有實例共享。

借用構造函數
在子類型構造函數內部調用父類型構造函數
call函數
語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
參數:thisObj 可選項。將被用作當前對象的對象。 arg1, arg2, , argN 可選項。將被傳遞方法參數序列。
說明:call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的對象上下文從初始的上下文改變為由 thisObj 指定的新對象。

function SuperType(){
    this.colors = ["red","green","blue"];
}

function SubType(){
    //繼承了SuperType
    SuperType.call(this);
}

var instance1 = new SubType();
instance1.colors.push("white");

alert(instance1.colors);

var instance2 = new SubType();
alert(instance2.colors);

借用構造函數的問題:
方法都在構造函數中定義,函數復用是個問題,而且在父類原型中定義的函數,對于子類也是不可見的。

組合繼承

function SuperType(name){
    this.name = name;
    this.colors = ["red", "green", "blue"];
}

SuperType.prototype.sayName = function(){
    alert(this.name);
}

function SubType(name,age){
    //繼承屬性
    SuperType.call(this,name);
    this.age = age;
}

//繼承函數
SubType.prototype = new SuperType();
SubType.prototype.constructor = SubType;
SubType.prototype.sayAge = function(){
    alert(this.age);
}

var instance1 = new SubType("Jack",20);
instance1.colors.push("white");
alert(instance1.colors);
instance1.sayName();
instance1.sayAge();

var instance2 = new SubType("Rose",22);
alert(instance2.colors);

閉包

變量的作用域
根據作用域劃分,變量有兩種類型:全局變量和局部變量。
在函數內部訪問全局變量:

var n=100;
function f1(){
    alert(n);
}
f1(); // 100

函數外部自然無法讀取函數內的局部變量

function f1(){
    var n=100;
}
alert(n); // error

如何從外部讀取局部變量?
出于種種原因,我們有時候需要得到函數內的局部變量。但是,前面已經說過了,正常情況下,這是辦不到的,只有通過變通方法才能實現。
那就是在函數的內部,再定義一個函數。

function f1(){
    var n=100;
    function f2(){
        alert(n); // 100
    }
}

在上面的代碼中,函數f2就被包括在函數f1內部,這時f1內部的所有局部變量,對f2都是可見的。但是反過來就不行,f2內部的局部變量,對f1就是不可見的。這就是Javascript語言特有的"鏈式作用域"結構(chain scope),子對象會一級一級地向上尋找所有父對象的變量。所以,父對象的所有變量,對子對象都是可見的,反之則不成立。
既然f2可以讀取f1中的局部變量,那么只要把f2作為返回值,我們不就可以在f1外部讀取它的內部變量了嗎?

function f1(){
    var n=100;
    function f2(){
        alert(n);
    }
    return f2;
}
var result=f1();
result(); // 100
```

**閉包的概念**
上面代碼中的f2函數,就是閉包。
閉包,指有權訪問另一個函數作用域中的變量的函數,在本質上,閉包就是將函數內部和函數外部連接起來的一座橋梁。

**閉包的用途**
閉包可以用在許多地方。它的最大用處有兩個,一個是前面提到的可以讀取函數內部的變量,另一個就是讓這些變量的值始終保持在內存中。
```
function f1(){
    var n=999;
    nAdd=function(){n+=1}
    function f2(){
        alert(n);
    }
    return f2;
}
var result=f1();
result(); // 999
nAdd();
result(); // 1000
```

##2.4.DOM編程
DOM就是HTML頁面的模型,將每個標簽都做為一個對象,JavaScript通過調用DOM中的屬性、方法就可以對網頁中的文本框、層等元素進行編程控制。比如通過操作文本框的DOM對象,就可以讀取文本框中的值、設置文本框中的值。

HTML DOM定義了訪問和操作HTML文檔的標準方法。他把HTML文檔呈現為帶有元素、屬性和文本的樹結構。在層次圖中,每個對象是它的父對象的屬性,如Window對象是Document對象的父對象,所以在引用Document對象就可以使用Window.Document,相當于document是window對象的屬性。對于每一個頁面,瀏覽器都會自動創建Window對象、Document對象、Location對象、Navigator對象、History對象。


![DOM.png](http://upload-images.jianshu.io/upload_images/1128757-ab795ded1ac38742.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

```
window.onload = function(){
    var child = document.createElement("span");
    child.innerHTML = "<i>jason</i>";
    var node = document.getElementById('wrapper');
    node.appendChild(child);
}

```
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,774評論 1 92
  • 在線閱讀 http://interview.poetries.top[http://interview.poetr...
    前端進階之旅閱讀 114,508評論 24 450
  • 什麼是內存 計算機組成:控制器,運算器,存儲器,輸入,輸出 存儲器速度: 寄存器 > x級緩存>內存(主存儲器) ...
    blensmile閱讀 324評論 0 2
  • 在股市中混了那么多年,總聽到許多投資者反反復復地強調心態的重要性。 其實心態真的有那么重要嗎? 如果把投資比作戰爭...
    愛吃番茄great閱讀 148評論 0 0
  • 常聽到家長這么說:“我家孩子沒有藝術天賦,整個家庭里也沒人藝術細胞”,然而,藝術可能是唯一不那么需要天賦的“學科”...
    孫亞瓊閱讀 814評論 0 0