zoukankan      html  css  js  c++  java
  • js原型和原型链理解 constructor 构造函数

    一.对象:普通对象   函数对象

    二.构造函数特点:1.需要new实例化,内部使用this对象指向即将要生成的实例对象  2.首字母大写,用于区分普通函数

    function Person(name){
        this.name=name
    }
    var person1=new Person('xiaohong')
    var person2=new Person('lili')

    person1.constructor=Person   constructor指向构造函数,Person的内置属性 Person.prototype(函数对象),每个原型对象都有一个constructor属性,指向prototype属性所在的函数Person

    即person1.constructor=person2.constructor=Person.prototype.constructor

    通过原型实现继承

    三.__proto__,每个对象都有这个属性指向创建他的构造函数的原型即person1.__proto__=Person.prototype

    //var obj={}
    var obj=new Object();
    obj.constructor===Object
    obj.__proto__===Object.prototype

    person1.__proto__是Person.prototype

    Person.__proto__是Person是构造函数,Function,即Function.prototype

    Person.prototype._proto__是  Person.prototype是原型对象,Object,即Object.prototype

    Object.__proto__是 Objext是构造行数Function 即Function.prototype

    Object.prototype.__ptoto__是 Object.prototype的原型对象的__proto__指向构造函数的prototype,处于顶层是null

    四。Math和Json是以对象存在的 即Math.__proto__===Object.prototype

    五。Function.prototype是唯一一个typeof Function.prototype是function的prototype,其他构造器的prototype都是object

    六。注意constructor的指向例如

    function Animal(){
    
    }
    Animal.prototype.age='20'
    
    function Cat(name,color){
        this.name = name
        this.color = color
        this.name2 = '11112222'
    }
    Cat.prototype = new Animal();
    Cat.prototype.type="猫"
    Cat.prototype.eat=function(){
        console.log('爱吃鱼')
    }
    function Dog(name){
        this.name=name
    }
    Dog.prototype = new Animal();
    Dog.prototype={
        getName:function(){
            console.log('gougou')
        }
    }

    Cat.prototype.constructor === Animal   Dog.prototype.constructor===Object 两者不相同,后者是重写Animal.prototype,前者是修改。

    七。

    • 原型和原型链是JS实现继承的一种模型。
    • 原型链的形成是真正是靠__proto__ 而非prototype
    人是在一天天内提高的,只有不断努力才不会被淘汰!
  • 相关阅读:
    malloc和new的区别
    Http协议解析
    Linux基础命令-history
    Linux基础命令-last
    Linux基础命令-who
    Linux基础命令-free
    Linux基础命令-uptime
    Linux基础命令-uname
    Linux基础命令-ifconfig
    Linux基础命令-killall
  • 原文地址:https://www.cnblogs.com/bais/p/9068928.html
Copyright © 2011-2022 走看看