一切皆为对象。 javascript
function 也是对象, 类型是 function, 原型是 Function(){}; java
hasOwnProperty函数:
hasOwnProperty是Object.prototype的一个方法,它但是个好东西,他能判断一个对象是否包含自定义属性而不是原型链上的属性,由于hasOwnProperty 是 JavaScript 中惟一一个处理属性可是不查找原型链的函数。 数组
.prototype 属性:
对象的原型,指向对象的原型。 javascript 采用的是原型链集成方式。 函数
.constructor 属性:
constructor 属性返回对建立此对象的数组函数的引用。 this
.constructor 的应用:
好比获取个目标对象同样的 对象,可使用 new this.constructor(); prototype
instanceof 为判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例;返回boolean类型
语法为 o instanceof A 对象
javascript中instanceof和类的细节 继承
在javascript里,每一个function都有一个prototype属性,这个属性的用途是实现继承机制。必以下面定义的function class1:
function class1(){}
class1.prototype = {a:10,b:100};
则class1的每一个实例都会从prototype继承a和b这两个属性。
同时,每一个对象都会有一个内部的属性_proto_(不一样的javascript虚拟机实现用的名字可能不一样),这个属性对js开发人员不可见,只在虚拟机内部使用。每当建立一个对象的时候,这个对象的_proto_就会被赋值为这个对象的构造函数的prototype,这样对象的_proto_属性和构造函数的prototype引用相同的对象,而且一旦对象建立完成,_proto_属性就不会改变。 这样经过对象的_proto_属性,以及_proto_所引用的对象的_proto_属性,就构成了一个_proto_链。 当访问一个对象的属性和方法的时候,js虚拟机正是经过这个_proto_链来查找的。
关于instanceof:
假设有一条这样的语句:
o instanceof c;
在上面的语句执行过程当中,虚拟机会把c.prototype和o的_proto_链上的节点逐个进行比较,若是找到相等的节点,则返回true,不然返回false。 ip
JavaScript中__proto__与prototype的关系1、全部构造器/函数的__proto__都指向Function.prototype,它是一个空函数(Empty function)
2、全部对象的__proto__都指向其构造器的prototype
原型链