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
  • 相关阅读:
    Visual Basic 9.0 前沿播报·静态篇(二)对象初始化器和匿名类型
    Visual Basic 9.0 前沿播报内容概览
    Refactor! for VB —— VB2005的重构支持(一)
    我不知道该说什么,这里太先进了!
    Visual Basic 9.0 前沿播报·静态篇(一)局部变量类型推测和数组初始化器
    关于“就地颠倒句子里的词”面试题
    Visual Basic 9.0 前沿播报·静态篇(三)扩展方法
    《窝窝世界》视频20101025
    Silverlight 游戏开发小技巧:透明背景的Silverlight程序
    Silverlight 游戏开发小技巧:技能冷却效果2(Cooldown)2
  • 原文地址:https://www.cnblogs.com/yizhilin/p/14398122.html
Copyright © 2011-2022 走看看