美文网首页
isPrototypeOf 、instanceof和 getPr

isPrototypeOf 、instanceof和 getPr

作者: asimpleday | 来源:发表于2019-01-02 22:21 被阅读0次
    isPrototypeOf

    当调用一个构造函数创建一个新实例后,该实例的内部将包含一个指针,指向这个构造函数的原型对象。ECMA-262第5版中管这个指针叫[[Prototype]]
    在所有实现中,是无法访问到[[Prototype]]的,这里就可以使用isPrototypeOf()方法来确定对象与构造函数的原型对象之间是否有这个指针存在。

    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype = {
        constructor: Person,
        type: '人',
        sayHi: function () {
            alert('hi');
        }
    }
    function Cat(name,color) {
        this.name = name;
        this.color = color;
    }
    Cat.prototype = {
        constructor: Cat,
        type: '猫',
        sayHi: function () {
            alert('喵');
        }
    }
    var person = new Person('tom', 24);
    var cat = new Cat('小灰', 'gray');
    
    console.log(Person.prototype.isPrototypeOf(person));   // true
    console.log(Cat.prototype.isPrototypeOf(cat));   // true
    
    console.log(Person.prototype.isPrototypeOf(cat));   // false
    console.log(Cat.prototype.isPrototypeOf(person));   // false
    
    getPrototypeOf

    ECMAScript 5 新增的一个方法,这个方法返回 [[Prototype]]的值,也就是对应的构造的函数的原型对象。

    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype = {
        constructor: Cat,
        type: '人',
        sayHi: function () {
            alert('hi');
        }
    }
    function Cat(name,color) {
        this.name = name;
        this.color = color;
    }
    Cat.prototype = {
        constructor: Cat,
        type: '猫',
        sayHi: function () {
            alert('喵');
        }
    }
    var person = new Person('tom', 24);
    var cat = new Cat('小灰', 'gray');
    
    console.log(Object.getPrototypeOf(person) == Person.prototype);   // true
    console.log(Object.getPrototypeOf(cat) == Cat.prototype);   // true
    
    console.log(Object.getPrototypeOf(person) == Cat.prototype);   // false
    console.log(Object.getPrototypeOf(cat) == Person.prototype);   // false
    
    instanceof

    检测一个对象的类型。
    详细一点就是: 用来判断一个构造函数的prototype属性所指向的对象是否存在于另外一个要检测对象的原型链上。
    用法

    # 检测一个对象的类型
    function Person() {
    
    }
    var person = new Person();
    alert(person instanceof Person);   // true
    
    # 继承中判断实例是否属于它的父类
    function Super() {
    
    }
    function Sub() {
    
    }
    Sub.prototype = new Super();
    var instance = new Sub();
    console.log(instance instanceof Object);   // true
    console.log(instance instanceof Super);   // true
    console.log(instance instanceof Sub);   // true
    

    相关文章

      网友评论

          本文标题:isPrototypeOf 、instanceof和 getPr

          本文链接:https://www.haomeiwen.com/subject/tygtrqtx.html