javascript中原型链与instanceof 原理

instanceof:用来判断实例是否是属于某个对象,这个判断依据是什么呢?

首先,了解一下javascript中的原型继承的基础知识:

javascript中的对象都有一个__proto__属性,这个是对象的隐式原型,指向该对象的原型对象。显式的原型对象使用prototype,但是Object.prototype.__proto__=null;

判断某个对象a是否属于某个类A的实例,可以通过搜索原型链。

//继承机制
    function A(){
    }
    A.prototype.name=‘licui‘;

    function B(){

    }
    B.prototype = new A();

    var a = new A();
    var b = new B();
    //b.name = ‘hello‘;

    console.log(‘A:‘,A);
    console.log(‘B:‘,B);
    console.log(‘a:‘,a);
    console.log(‘b:‘,b);

    console.log(‘A.prototype‘,A.prototype);
    console.log(‘B.prototype‘,B.prototype);
    console.log(‘a._proto_‘,a.__proto__);
    console.log(‘b._proto_‘,b.__proto__);

    console.log(‘a instanceof A:‘,a instanceof A);
    console.log(‘a instanceof Object:‘,a instanceof Object);
    console.log(‘b instanceof B:‘,b instanceof B);
    console.log(‘b instanceof A:‘,b instanceof A);
    console.log(‘b instanceof Object:‘,b instanceof Object);

执行结果

constructor:是原型prototype上的属性,实例上不具有该属性。

时间: 2024-11-05 13:38:02

javascript中原型链与instanceof 原理的相关文章

javascript中原型链存在的问题

我们知道使用原型链实现继承是一个goodway:)看个原型链继承的例子. function A () { this.abc = 44; } A.prototype.getAbc = function (){ return this.abc; }; function B() { } B.prototype = new A(); // B通过A的实例完成了继承,形成了原型链(B的原型就是A的实例) var b = new B(); b.getAbc(); 关系如下:b(实例) ->B.prototy

JavaScript中原型链的那些事

引言 在面向对象的语言中继承是非常重要的概念,许多面向对象语言都支持两种继承方式:接口继承和实现继承.接口继承制只继承方法签名,而实现继承继承实际的方法.在ECMAScript中函数没有签名,所以ECMAScript无法实现接口继承,只能实现实现继承.那么是怎么实现实现继承的呢??这就要说一说JS中的原型链了. 原型链的定义 什么是原型链?这个问题很简单,其基本思想就是利用原型让一个引用类型继承另一个引用类型的属性和方法. 我们先来回顾一下构造函数,原型,实例之间的关系.每一个构造函数都有一个原

对Javascript中原型的深入理解

  理解原型对象 在Javascript中无论什么时候,只要创建一个新的函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象(这个对象的用途是包含可以有特定类型的所有实例共享的属性和方法).如果按照字面上的意思来理解,那么原型属性就是通过调用构造函数而创建的那个对象的实例的原型对象. 在默认的情况下,所有的原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针.如下图 function P

Javascript的原型链图

90%的前端或者js程序员或者老师们对Javascript懂得不比这个多 给手机看的 但是这个图里的所有褐色单向箭头链就是Javascript的原型链(颜色标注对理解js原型链很关键) 这图中的各个__proto__ constructor .prototype 都是内部对象 这样画是为了简洁 举个例子 如果考虑__proto__ 作为内部对象 上图变为 原型链就是 constructor 和 prototype如果作为内部对象 放到相应的位置 图就变大麻团了 保证晕倒什么也记不住 不服请看 这

javascript中原型,构造器,还有E5扩展的默认成员

对象原型所具有的基本特征:1.toString() 2.toLocaleString() 3.valueOf() 4.constructor() 5.propertyIsnumerable() 6.hasOwnProperty() 7.isPrototypeOf()构造器所具有的特殊成员1.call() 2.apply() 3.caller() 4.bind() 5.arguments [object] 6.length [number] 7.prototype [objcet] E5对于Obj

JavaScript原型链和instanceof运算符的暧昧关系

时间回到两个月前,简单地理了理原型链.prototype以及__proto__之间的乱七八糟的关系,同时也简单了解了下typeof和instanceof两个运算符,但是,anyway,试试以下两题: console.log(Function instanceof Function); console.log(String instanceof String); 如果无法得出准确答案,跟着楼主一起温故而知新吧. 温故 我们经常用typeof运算符来判断一个变量的类型,也确实挺好用,能判断出numb

javascript中原型(prototype)与原型链

javascript是一门动态语言(动态语言Dynamic Programming Language:动态类型语言,意思就是类型的检查是在运行时做的,也就是常说的“弱类型”语言),没有类的概念,有class保留字,但不能用作变量名 原型:Javascript中的每一个对象都有一个内部私有的连接指向另一个对象,这个对象就是原对象的原型 注意:原型是一个对象,其他对象可以通过他实现属性继承 原型链:这个原型对象也有自己的原型,直到对象的原型为null为止(也就是没有原型),这种一级一级的链结构就称为

JavaScript中原型对象的彻底理解

一.什么是原型 原型是Javascript中的继承的继承,JavaScript的继承就是基于原型的继承. 1.1 函数的原型对象 ? 在JavaScript中,我们创建一个函数A(就是声明一个函数), 那么浏览器就会在内存中创建一个对象B,而且每个函数都默认会有一个属性 prototype 指向了这个对象( 即:prototype的属性的值是这个对象 ).这个对象B就是函数A的原型对象,简称函数的原型.这个原型对象B 默认会有一个属性 constructor 指向了这个函数A ( 意思就是说:c

JavaScript中的constructor、instanceof、isPrototypeOf、typeof以及hasOwnProperty

转自:http://www.cnblogs.com/ArthurXml/p/6555509.html 1.hasOwnProperty和in 先来理解hasOwnProperty方法.这个方法是用来检查对象的非原型链属性,换句话说,也就是检查对象中用户自定义的属性,而且这些属性不是定义在prototype上的.通过下面的代码进行理解: var myFunc=function(){ this.foo='value'; }; myFunc.prototype.ok='ok'; thefunc=new