zoukankan      html  css  js  c++  java
  • JavaScript

    问题:对引用型变量覆盖赋值后,其内存过程是如何的?
    由下面的程序可以推断,应该是销毁原先的的内存区域,在新的内存中重新创建同名变量,因为其内存地址是不同的...

    程序说明:在原型中查找值的过程是一次搜索,对原型对象的任何修改都能立刻从实例上反映出来,即使是先创建了实例后再修改原型也照样如此。

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>this is an example</title>
    </head>
    <body>
            
        <script type="text/javascript">
            // 建立构造函数
            function Animal(name,age,color){
                this.name = name;
                this.age = age;
                this.color = color;
            }
            // 由构造函数创建实例
            var cat = new Animal("cat",3,"black");
            // 为原型对象添加 sayHi 函数
            Animal.prototype.sayHi = function(){
                alert("Hi ");
            }
            //重写原型对象
            Animal.prototype = {
                     constructor : Animal,
                    type : "eatMeat",
                    run : function(){
                        alert("i can run fast");
                    }    
            }
            
            alert(Animal.prototype.isPrototypeOf(cat));// false
            
            cat.sayHi();// 调用原型的 sayHi 函数  正常
            //cat.run();// 调用原型的run 函数  错误
            
            // 原型对象重写后,由构造函数创建的实例指针无法指到新的原型对象
            /*  
                问题:
                    对引用型变量覆盖赋值后,其内存过程是如何的?
                    
                    由上面的例子可以推断,应该是销毁原先的的内存区域,在新的内存中重新创建同名变量
            
            */
            
            Table = {
                    name : "godd",
                    age : 8,
                    sayHi : function(){
                        alert("Hi table ");
                    }
            }
        
            Table.sayHi();
            
            Table = {
                    color : "red",
                    sayHello : function(){
                        alert("hello");
                    }
            }
          //Table.sayHi(); //error!
             Table.sayHello();
          
        </script>   
    </body>

    也就是说,新Table 和原先的Table 在内存中的地址应该是不一致的,整个过程应该是先销毁原先的 Table,然后在内存中重新建 新的Table

  • 相关阅读:
    apache虚拟主机三种不同配置方式
    搭建http服务器及配置
    学校ftp服务器搭建
    vsftpd搭建使用
    nginx使用
    pxe+kickafkstart (二)转
    pxe批量网络装机
    bash中()使用特性
    ansible使用
    javascript 之 Object.defineProperty
  • 原文地址:https://www.cnblogs.com/zhanghust/p/5936565.html
Copyright © 2011-2022 走看看