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"

 

 

参考文献

相关文章
相关标签/搜索