JavaScript说:万物皆对象
Σ( ° △ °|||)︴
主要内容如下:
原型及原型链
this的调用
原型及原型链
prototype即为原型,指的是当前函数的原型。该属性是一个对象。
proto 也是原型,指的是创建该对象函数的原型。该属性是一个对象。
通过new Function()创建的对象都是函数对象,其他的都是普通对象。函数对象都有prototype属性。普通对象没有prototype,但有proto属性。
如果函数没有任何属性的话,prototype用作给当前函数增加属性,默认有一个constructor属性。
原型链:当遇到自身没有的属性时,通过prototype路径向父级寻找,所以可以修改父级属性,因此不推荐用作修改。
this的调用
在全局作用域下面调用this,this指向global即window。
function fn(){ this.x = 1; console.log(fn.x); } fn(); // 1用 new 关键词构造函数,this 指向创建的新对象。this当前的函数为对象属性的时候,this指向该对象。
function fn(){ this.x = 1; } var fn2 = new fn(); ////从fn方法中new复制了一份实例赋值给fn2来生成对象,fn2可继承父级 console.log(fn2.x); // 1
运算符
typeof 运算符:检测基本的数据类型,用于判断简单变量的类型。(number,boolean,string,undefined,object,function)
instanceof 运算符:检测引用数据类型,用于判断复杂变量引用的数据类型、变量;返回boolean类型。
语法: A instanceof B A是否引用自B
原理:查看对象B的prototype指向的对象是否在对象A的[[prototype]]链上。如果在,则返回true,如果不在则返回false。不过有一个特殊的情况,当对象B的prototype为null将会报错(类似于空指针异常)。
console.log(Object instanceof Object);//true console.log(Function instanceof Function);//true console.log(Number instanceof Number);//false console.log(arr instanceof Function);//true //数组和对象的关系:数组是对象的子集 对象包含数组。 console.log(fn instanceof Object);//true //函数与对象的关系:所有对象都是由函数创建的 但是在instanceof检测函数又是对象。