JavaScript之原型|typeof|instanceof

//var 變量X --> 對象 --> 構造器 --> 原型對象 
function Person(){};
var stu = new Person();
//var stu = new Person.constructor();//等效


//instanceof:用來肯定一個實例是不是由特定函數構造器所建立的;還能夠用於判斷函數是否繼承了其原型鏈中任何對象(必需要了解:原型鏈)
stu instanceof Person;//true
typeof stu; // "object"
stu.prototype; //undefined
stu.constructor; // f Person(){}

 

var 變量X --> 對象 --> 構造器 --> 原型對象 javascript

 

instanceof:java

    1.用來肯定一個實例是不是由特定函數構造器所建立的;chrome

    2.還能夠用於判斷函數是否繼承了其原型鏈中任何對象(必需要了解:原型鏈)數組

function Person(){this.name};
function Student(){this.school};
Student.prototype = new Person();//原型鏈,實現繼承
/*
    注意:
           強烈不推薦: 父類原型直接賦值給子類原型,不然子類原型上的任何修改都將會影響到父類的原型,由於他們是同一個對象
           但也有的好處:全部原型中繼承的函數都是實時更新的(live-update)
           Eg:Student.prototype = Person.prototype;

*/

var stu = new Student();
console.log("stu instanceof Student:",stu instanceof Student);//true
console.log("stu instanceof Person:",stu instanceof Person);//true  


//////////////////////|分隔符|/////////////////////
function a(){}
(new a()) instanceof Function //false

function a(){}
(new a()) instanceof a // true

function a(){}
(new a()) instanceof Object // true

 

hasOwnProperty(item):瀏覽器

  objectInstance.hasOwnProperty(item))//用於判斷一個屬性是不是對象實例定義的,仍是從原型導入的 函數

//擴展:對JavaScript原生對象的擴展
//原理:原型對象
Object.prototype.keys = function(){
	var keys = [];
	for(var item in this)
		if(this.hasOwnProperty(item))//用於判斷一個屬性是不是對象實例定義的,仍是從原型導入的
		    keys.push(item);
	return keys;
}

var obj = {"name":"johnny","age":21};
obj.keys();//["name"."age"]

 

ECMAScript中的(六大)基本數據類型this

1.簡單數據類型spa

  Undefined、Null、Boolean、Number、Stringprototype

2.複雜數據類型code

  Object

備註:

  ECMAScript不支持任何建立自定義的機制,而全部值都最終都將是上述6種數據類型之一。

  但因爲ECMAScript數據類型具備動態性,所以便沒有再定義其餘數據類型的必要了。

 

//變量的動態性:這意味着相同的變量可用做不一樣的類型:
var x                // x 爲 undefined
var x = 6;           // x 爲數字
var x = "Bill";      // x 爲字符串

 

 

 typeof(A):檢測給定變量的數據類型----typeof

函數對象:typeof(function a(){}) //"function"
  說明:
    1.在safari、chrome中,返回「function」,其餘瀏覽器中返回「object」。
    2.從技術角度講,函數在ECMAScript中是對象,不是一種數據類型。
    3.然而,函數也確實有一些特殊的屬性。所以經過typeof操做符區分函數和其餘對象也是必要的。  

對象:typeof({}) //"object"
        typeof(null) //"object"
數組對象:typeof([]) //"object"

undefined:typeof(undefined) //"undefined"(即是變量未定義,也可對某變量賦undefined爲具體值)
  說明:
    1.undefined派生自null
    2.關於四大值屬性(Infinity、NaN、undefined、null字面量),詳見MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects

字符串:typeof("") //"string"
數值:typeof(34) // "number"
        typeof(NaN) // "number"
布爾:typeof(true) //"boolean"

 

 

參考文獻

相關文章
相關標籤/搜索