b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

对原型链和js对象的内存地址的了解

电脑杂谈  发布时间:2020-08-15 13:01:47  来源:网络整理

js对象内存图_js对象 json对象_js定义json对象

1. js对象的内存地址分析

 var o = new Object(),
    o1 = Object();
    console.log(o == o1);//false
    console.log(o === o1);//false
    var f = new Function(),
    f1 = Function();
    console.log(f == f1);//false
    console.log(f === f1);//false
    
    var a = new Array(),
    a1 = Array();
    console.log(a == a1);//false
    console.log(a === a1);//false
    var n = new Number(),
    n1 = Number();
    console.log(n == n1);//true
    console.log(n === n1);//false
    var s = new String(),
    s1 = String();
    console.log(s == s1);//true
    console.log(s === s1);//false
    var b = new Boolean(),
    b1 = Boolean();
    console.log(b == b1);//true
    console.log(b === b1);//false
    //数据类型null/undefined是没有构造函数

注意: 上面示例中的对象/函数/数组的比较结果都很容易说,因为它们构造了新对象,并且对象比较是比较根源(数据是否相同). 无论使用new还是直接调用生成新对象,都是为了打开一个新的存储空间,它将不等于任何对象.

js中对象的比较: 仅当地址相同时才相等. 该地址是指内存地址,即: 存储在计算机内存中的位置.

例如:

···

var a = new Object();

var b = new Object();

a.name =“ mm”;

js定义json对象_js对象内存图_js对象 json对象

b.name =“ mm”;

var c = a;

var d = a;

···

1,a == b // false

2,a == c // true

3,a == d // true

4,b == c // false

5,b == d // false

js定义json对象_js对象内存图_js对象 json对象

其中a == b为假,因为其内存地址不同. 一种流行的理解是,两件事在堆内存中的位置不同.

对于var a = 1;实际上,创建了一个对象a,但是js无法直接引用其值,而是实际上引用了与对象a对应的堆的地址. 可以理解为: 存储在变量对象中的地址,与堆内存的实际值相关.

示例:

var a = 20;
var b = a;
b = 30;

599584-959cc758fb313a03.png

var m = { a: 10, b: 20 }
var n = m;
n.a = 15;

599584-c269c5cae7d537.png

js定义json对象_js对象 json对象_js对象内存图

QQ图片201.png

有关JS内存空间的详细说明,请访问:

两个. 原型原型链

了解以上介绍的内存地址将更有助于理解原型和原型链

7ed42f5cly1fqguw4y1zej20ge0e8wes.jpg

我们必须首先了解这张图片.

看下面的图片以了解上面的图片

js对象内存图_js对象 json对象_js定义json对象

QQ图片229.png

function person(){}是一个构造函数,向其原型对象,person,prototype(指向原型对象),person,prototype.constructor(指向构造函数),person1(指向person实例),person1.proto(指向原型对象person1.proto == person.prototype // true).

每个实例对象(对象)都有一个指向其原型对象(原型)的私有属性(称为proto). 原型对象还逐层具有其自己的原型对象,直到对象的原型对象为空. 根据定义,null没有原型,它是原型链中的最后一个链接.

JavaScript中几乎所有对象都是原型链顶部的对象实例.

三个. 使用

使用原型对象的优点是所有对象实例都共享其属性和方法.

示例:

function Fish() {
}
Fish.prototype.name = "大白鲨";
Fish.prototype.color = '白色';
Fish.prototype.food = '大白鲨吃其它鱼';
Fish.prototype.eat = function () {
alert(this.food);
};
var shark1 = new Fish();
var shark2 = new Fish();
//    shark1.eat();
console.log(shark1.name);
console.log(shark2.name);
这里需要注意一点,shark1.name == shark2.name//true          shark1 == shark2 //false   不懂的看第一段。

请参阅“高级编程”

问题: 1.什么是原型链: ECMAScript中原型链的基本思想是使用原型允许一个引用类型继承另一引用类型的属性和方法. 基本的实现是利用构造函数,原型和实例之间的关系. 也就是说,每个构造函数都有一个原型对象,该原型对象包含一个指向构造函数的指针,而实例包含一个内部指针指向该原型对象[[prototype]]. 由于构造函数,原型和实例之间存在这种关系,如果我们使一个原型对象等于另一个构造函数的实例,则该原型对象将包含一个指向另一个原型对象的指针,在这种情况下,另一个原型原型也包含一个指向另一个构造函数的指针. 如果另一个原型是另一个类型的实例,则上述关系仍然成立. 这种进步水平足以成为示例和原型链. 这就是所谓的原型链的基本概念.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-299411-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...