Javascript基本概念梳理

javascript裏的數據類型:

原始類型:數字,字符串,布爾值。(原始值:null,undefined)

對象類型:鍵值對,數組,function,全局對象(MATH,JSON)

保留字:

abstract
boolean
byte
char
class
const
debugger
double
enum
export
extends
final
float
goto
implements
import
int
interface
long
native
package
private
protected
public
short
static
super
synchronized
throws
transient
volatile


包裝對象的概念:

字符串"aaa".len 字符串並不是對象,但是卻可以調用它的屬性,說明這只是一個臨時對象,內部用new String()來創建的臨時的。


原始類型是永遠不可變的,所以可以比較他們的值,但是對象類型是可變的,不能比較他們的值.

Javascript原型和繼承:

Javascript裏每個對象都和另外一個對象關聯,這個對象就是__proto__(原型對象)注意這裏的原型對象並不是prototype。

解釋一下:這裏的prototype指的是通過關鍵字new和構造函數調用創建的對象的原型就是構造函數的prototype屬性。

對象實例的__proto__指向這個對象的prototype,而對象的__proto__爲空。舉個例子就是:

var array = new Array();
array.__proto__ === Array.prororype  //true
Array.__proro //null

當然,也可以使用Object.getPrototypeOf()替代__proto__來使用來得到對象所繼承的原型,舉例說明:

Object.getPrototypeOf(Array) === Array.__proto__;


Object.getPrototypeOf()來查看原型繼承,例如:

Object.getPrototypeOf(Array.prototype) // Object  

可以看出Array的prototype繼承Object所以Array也有他的方法例如totring()等。可以得到所有的對象都有一個共同的原型,就是Object但是Object只是一個構造函數,想要訪問他,就只用Object..prototype來得到。


例如,Object..getPrototypeOf()來查看自定義的繼承

function A(){};
function B(){};
A.prototype = new B();
Object.getPrototypeOf(A.prototype) //B

使用Object.create()實現繼承:

Object.create()接受一個參數,爲對象的prototype,其實還有第二個參數用來描述熟悉的特性,源碼是基於new ()從而賦值他的prototype來實現的

Object.create = function (o) {

         var F = function () {};

         F.prototype = o;

         return new F();

     };

var b=Object.create(a);


Object.create()可以創建對象,當然也可以創建對象的子對象,可以這樣理解

var a = Object.create({a:1})

那麼a就有了一個熟悉a,這樣就可以理解爲繼承了,如果是一個函數,例如Array是一個函數對象

var myArray = Object.create(Array.prototype)

那個myArray也就具有了Array的所有方法

myArray.push

自定義的函數

function Acc(){}
Acc.prototype.dd = 123;
var accc = Object.create(Acc.prototype);
accc.dd //123

未完!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章