js原型和原型链

 js中最重要的两条链作用域链和原型链,作用域链是从上往下,原型链是从下往上。

 1.原型是什么

  1)原型就是一个属性,是构造函数属性,是构造函数制造出来的对象的公共祖先,后面所有对象都会继承原型的属性和方法。

  2)原型也是一个对象,所有实例对象需要共享的属性和方法都会存放在这个对象里面,不需要共享的就放在构造函数里面。

  3)在默认情况下,所有原型对象都会自动获得一个constructor属性,这个属性指向prototype属性所在函数。

即 Person.prototype.constructor == Person。

 2.prototype和__proto__

  __prototype__ 用来查看原型,是对象的属性,可以查看但是不能修改。

  prototype用来修改原型。

  每个对象都有__proto__属性,但只有函数对象才有prototype属性

 3.任何对象的最终原型都是Object.prototype。

 4.原型链:在JavaScript中每个对象都有一个指向他的原型内部对象的内部链接,每个原型对象又有自己的原型,直到某个对象的原型为null为止,组成这条链的最后一环。

 5.原型对象的作用:原型对象主要作用主要是用于继承。

 6.__proto__ JS在创建对象的时候,都有一个叫做__proto__的内置对象属性,用于指向创建它的构造函数的原型对象。

 7.

<script>
    //先定义一个构造函数
    function Person(config){
        this.name = config.name;
        this.age = config.age;
        this.sex = function(){
            if (config.sex == 2) {
                return "女"
            }else{
                return "男"
            }
        }
    }
    var obj = {
        name : "wang",
        age : 16,
        sex : 2,
    }
    var person1 = new Person(obj);
    console.log(person1)
    console.log(Person.prototype.constructor)//出来的是构造函数Person
    console.log(person1.__proto__)//person1__proto__  和Person.prototype 是一样的
    console.log(Person.prototype)
    console.log(person1.constructor)//构造函数Person
    // Person.prototype.constructor == Person;
    // person1.__proto__ == Person.prototype;
    // person1.constructor == Person;
  // Person.prototype.__proto__ === Object.prototype
  // Object.prototype.__proto__ === null
</script>

Object.prototype也有proto属性,但是null。因为处于原型链的顶端。

8.所有的函数构造器也都是一个普通JS独享,可以给构造器添加或者删除属性等。同时也继承了Object.prototype上的所有方法。

  

原文地址:https://www.cnblogs.com/wangzheng98/p/11191714.html