栈内存和堆内存

127 阅读2分钟

一、面向对象基本特征

  1. 封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
  2. 继承:通过继承创建的新类称为“子类”或“派生类”。继承的过程,就是从一般到特殊的过程。
  3. 多态:对象的多功能,多方法,一个方法多种表现形式。
  4. Javascript是一种基于对象(object-based)的语言。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)—–es6以前是这样的。所以es5只有使用函数模拟的面向对象。
  /* 引用数据类型 会开辟一个内存(栈内存(内存的地址) 和 堆内存(内存的值) ) */
        let obj1 = {name:'zhangsan',age:20};
        let obj2 = {};

        /* obj1的栈内存的地址给了obj2 */
        obj2 = obj1;

        /* obj2 把obj1的堆内存的name值 由zhangsan 改成了 lili */
        obj2.name="lili"

        /* 所以 obj1 和 obj2 的值 都是一样的 其实都是obj1的堆内存的值 */
        console.log('obj1',obj1);
        console.log('obj2',obj2);

1

<!-- 构造函数的方式 -->
    <script>
        /* obj是Object new出来的一个实例化对象 */
        // let obj = new Object()
        // obj.name = 'taotao'
        // obj.age = 30
        // obj.kaiche = function (){
        //     document.write( `${obj.name}--年纪${obj.age} 会开车` );
        // }
        // obj.kaiche();

        let obj = {
            "name":"taotao",
            "age":30,
            "kaiche":function (){
                console.log('this',this);
                document.write( `${this.name}--年纪${this.age} 会开车` );
            }
        }
        /* this是谁调用就是谁的  */
        obj.kaiche()
        console.log(obj);
        /* 对象字面量 */
        /* 对象定义的一种简写形式 */
        /* 简化创建包含大量属性的对象的过程 */
        /* 在为函数传递大量可选参数时,可考虑使用对象字面量 */




2

 <script>
    /* 基于Object的方式创建对象 */
    /* Object 类 */
    /* obj 实例化出来的对象 */
    //  let obj = new Object();
    //  obj.name = '涛涛';
    //  obj.age = '30';
    //  obj.playGame = function (){
    //     document.write('我nba2k 超级溜');
    //  }
    //  document.write(obj.name + '<br>');
    //  document.write(obj.age + '<br>');
    //  obj.playGame();

    /* 对象字面量 */
    /* 对象字面量
    对象定义的一种简写形式
    简化创建包含大量属性的对象的过程
    在为函数传递大量可选参数时,可考虑使用对象字面量 */