• 浅谈对js原型的理解


      一.  在JavaScript中,一切皆对象,每个对象都有一个原型对象(prototype),而指向该原型对象的内部指针则是__proto__。当我们对对象进行for in 或者for of遍历时,就会通过__proto__依次遍历对象关联的所有对象。这就是原型链,遍历所有对象的父对象直到object直至null。

    function Person(name,work){
        this.name = name;
        this.work = work;    
    }
    Person.prototype.show = function(){
        console.log(this.name);
    }
    var person = new Person('nicknailo','全栈开发');
    console.log(person.__proto__ === Person.prototype); //true
    console.log(Person.prototype.__proto__);//Object 或者{}
    console.log(person.__proto__.__proto__.__proto__);//null
    console.log(Person.prototype);//Person { show: [Function] }

           person对象的原型指向 Person.prototype,Person.prototype指向object,object 指向 null。蕴含了一个哲理,无中生有。

      二.

    JavaScript原型链分析图

    这是一张描述了Object、Function以及一个函数实例Foo他们之间原型之间联系。如果理解了上面的概念,这张图是不难读懂。

    Function.prototype.proto 指向了 Object.prototype,这说明Function.prototype 是一个 Object实例,那么应当是先有的Object再有Function。

    但是Object.prototype.constructor.proto 又指向了 Function.prototype。这样看来,没有Function,Object也不能创建实例。

      三.Person.prototype只是对象的原型上(constructor)扩展的属性。

    var animal = function(){};
    var dog = function(){};
    
    animal.price = 2000;
    dog.prototype = animal;
    var tidy = new dog();
    console.log(dog.price + " : dog.price");//undefined : dog.price
    console.log(tidy.price + " : tidy.price"); //2000 : tidy.price

      上述代码可以看出来,实例tidy只与原型对象dog.prototype存在关联,上面的代码可以看成是  dog.prototype.price = 2000;

  • 相关阅读:
    axios 修改头部请求数据格式的方法
    基于VUE的可以滚动的横向时间轴
    25.客户端多线程分组模拟高频并发数据
    24.原子操作
    23.线程锁的使用
    22.线程自解锁
    21.多线程-锁与临界区域
    20.多线程-基本代码
    19.添加高精度计时器测量处理能力
    18.windows使用select突破64个socket
  • 原文地址:https://www.cnblogs.com/nicknailo/p/8561597.html
Copyright © 2020-2023  润新知