美文网首页
理解javascript原型

理解javascript原型

作者: 吴博 | 来源:发表于2017-05-26 21:28 被阅读0次

    原型关键概念

    • 原型是一个对象,其他对象可以通过它实现属性继承
    • 任何一个对象都可以原型!
    • 哪些对象有原型?所有对象在默认情况下都有一个原型,因为原型本身就是一个对象,所以每个原型自身又有一个原型(只有一个例外,默认的对象原型在原型链的顶端。)
    • 原型属性:prototype
    • 原型:一个对象真正的原型是被对象内部的[[Prototype]]属性(property)所持有。(从java的角度来理解:对象的原型指向了父元素的原型属性)。String这样的对象我们也可以在他的原型属性上添加新的属性,但是我不建议这么做。
    var a = {};
    //Firefox and Chrome
    Object.getPrototypeOf(a);
    //Firefox , Chrome and Safari
    //
    a.__proto__; //[Object Object]
    // all browsers
    a.constructor.prototype; //[Object Object];
    
    • 一个构造函数A,创造了对象b, 那么b的原型指向了A的原型属性,A的原型属性(如果A是)。
      b的constructor的原型属性就是A的原型属性

    那何为对象呢?

    • 在JS中,对象就是任何无序键值对的集合,如果它不是一个主数据类型(undefined,null,boolean,number,string),那它就是一个对象 [ 这个概念有待考证,感觉不是那么的严谨]
    • 一个对象的真正原型是被对象内部的[[Prototype]]属性(property)所持有的

    对象操作API

    • Object.getPrototype(object) : 获取一个对象的原型

    instance of 和原型有什么关系

    • 如果a的原型属于A的原型链,表达式 a instance of A的值为true
    var A = function(a){
        this. a = a;
    }
    var a = new A("1");
    a.__proto__ == A.prototype; // true
    a instanceof A; // true
    

    一些内置方法:

    • isPrototypeOf : 用于检查某对象是否是用当前构造器创建的
    function Game(){}
    var game = new Game();
    Game.isPrototypeOf(game); // true
    game instanceof Game; // true
    
    • hasOwnProperty() : 用于检查某属性是不是当前对象自带的(非继承的)
    function Game(){
        this.name = "2048";
    }
    Game.prototype.age = 20;
    var game = new Game();
    game.hasOwnProperty('name'); // true
    game.hasOwnProperty('age'); // false
    

    相关文章

      网友评论

          本文标题:理解javascript原型

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