zoukankan      html  css  js  c++  java
  • js构造函数和原型

    创建对象的方式
    1,对象字面量
    var obj1 = {}
    2,new Object()
    var obj2 = new Object()
    3,利用构造函数创建对象
     
    构造函数
    利用构造函数 可以创建很多个对象
    构造函数,把对象中公共属性和方法抽出来,放在构造函数里,通过new创建不同的对象
    function Star (name ,age){
        this.name = name;
        this.age = age;
        this.song = function(){
            console.log('我会唱歌')
        }
    }

    构造函数+原型

    通过原型分配的函数,所有对象都可以共享
    function Star (name ,age){
        this.name = name;
        this.age = age;
        // this.song = function(){
        //     console.log('我会唱歌')
        // }
    }
    // 通过原型分配的函数,所有对象都可以共享
    Star.prototype.song = function(){
        console.log('我会唱歌')
    }
    Star.prototype.movie = function(){
        console.log('我会演电影')
    }
    
    var ldh = new Star('刘德华', 18)
    var zbz = new Star('张柏芝', 19)
    console.log(ldh)
    ldh.song()
    zbz.song()
    new的执行过程:
    1,new一个构造函数的时候,就创建一个空的对象
    2,把构造函数的 this 指向空的对象
    3,把构造函数属性和方法 进行赋值操作,赋给空对象
    4,返回创建一个新对象
     
    总结:
    构造函数 封装的方法在 创建新对象的时候会浪费内存,创建一个对象就开辟一块新内存
    原型:
     每一个构造函数都有一个prototype属性,指向另一个对象,这个对象就是原型对象; 这个对象的所有属性和方法,都会被构造函数所拥有。
    我们可以把那些不变的方法,定义在prototype对象上,这样所有新的实例对象就可以共享这些方法
    原型的作用:共享方法,节约内存
     
    为什么对象可以调用原型上的方法:
    每一个对象身上都有一个 __proto__属性  它指向我们的构造函数的原型对象prototype,所以对象就可以使用构造函数prototype原型对象
    的属性和方法。
    __proto__对象和原型对象prototype是等价的
    console.log(ldh.__proto__ === Star.prototype)
    // constructor我们称为构造函数,因为它指回构造函数本身 // constructor的作用:告诉我们对象 是引用那个构造函数创造出来的 console.log(Star.prototype) console.log(ldh.__proto__)
    原型链
    1,只要是对象就有__proto__原型,它指向原型对象
    2,我们Star原型对象里面的__proto__原型指向的是  Object.prototype
    console.log(Star.prototype.__proto__ === Object.prototype)
    // 3,我们Object.prototype原型对象里面的__proto__原型   指向为null
    console.log(Object.prototype.__proto__)
     
    只要是对象 它就有__proto__原型,这个原型指向 原型对象prototype,而原型对象也是对象,它也有自己的原型
    原型对象的原型 prototype.__proto__指向Object原型对象, Object原型对象也有原型__proto__  这就是原型链
     
    原型链就像一条线路,指引我们查找对象的成员
     1,首先在对象本身上去找,-> 2,对象上没有通过原型__proto__,就去原型对象上去找,-> 3,原型对象没有,就去Object上去找,-> 4,Object上没有,那就返回null
  • 相关阅读:
    LeetCode 79. 单词搜索
    LeetCode 1143. 最长公共子序列
    LeetCode 55. 跳跃游戏
    LeetCode 48. 旋转图像
    LeetCode 93. 复原 IP 地址
    LeetCode 456. 132模式
    LeetCode 341. 扁平化嵌套列表迭代器
    LeetCode 73. 矩阵置零
    LeetCode 47. 全排列 II
    LeetCode 46. 全排列
  • 原文地址:https://www.cnblogs.com/yizhilin/p/14398122.html
Copyright © 2011-2022 走看看