首页 > 代码库 > JavaScript 不解之一
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
JavaScript 不解之一
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。