自学内容网 自学内容网

JavaScript中的对象-栈内存和堆内存以及this指向的两种情况(后续会出进阶)

1.1 栈内存和堆内存

我们知道程序是需要加载到内存中来执行的,我们可以将内存划分为两个区域:栈内存和堆内存

  • 原始类型占据的空间是在栈内存中分配的
  • 对象类型占据的空间是在堆内存中分配的

1.1.1 值类型和引用类型

原始类型的保存方式:在变量中保存的是值本身

  • 所以原始类型也被称之为是值类型

对象类型的保存方式:在变量中保存的是对象的“引用”

  • 所以对象类型也被称之为引用类型

1.1.2 JavaScript中的一些现象

  1. 现象一:两个对象的比较
  var num1=123
  var num2=123
  console.log(num1===num2)//true
  //1.现象一:两个对象的比较
  var obj1 = {}
  var obj2 = {}
  console.log(obj1===obj2) //false
  

image-20241112183343555

现象二:

//现象二:引用赋值

 //现象二:引用赋值
  var info = {
    name:"why",
    friend:{
      name:"kobe"
    }

  }
  var friend = info.friend
  friend.name="jams"
  console.log(info.friend.name) //jams

现象三:值值传递

  //3.现象三:值传递
  function foo(a) {
    a=200
  }
  var num=100
  foo(num)
  console.log(num)//100

image-20241112192250882

 //现象四:引用传递
   function foo(a){
     a = {
       name : "why"
     }
   }
   var obj = {
     name:"obj"
   }
   foo(obj)
   console.log(obj)//打印的是obj的

image-20241112192908408

5.现象五:引用传递,但是在函数中创建了一个新对象,没有对传入的对象进行修改

 //5.现象五:引用传递,但是对传入的对象进行修改
  function foo(a) {
    a.name = "why"
  }
  var obj = {
    name: "obj"
  }
   foo(obj) 
     console.log(obj)//why

image-20241112193721844

2.1 函数中的this指向的两种情况

2.1.1 为什么需要this

在常见的编程语言中,几乎都有this这个关键字(Objective-C中使用的是self),但是JavaScript中的this和常见的面向对象语言中的this不太一样

  • 常见面向对象的编程语言中,比如C++,java,Swift,Dart等等一系列语言中,this通常只会出现在类的方法中
  • 也许你就是一个类,类中的方法(特别是实例方法)中,this代表的就是当前调用对象

代码示例

 var info = {//对象是一种数据结构
    name:"why",

    running:function(name) {
      console.log("running~",this.name)//先看一下自己的作用域找有没有name,没有就去WIndow对象里面找
    },

    eating: function(name) {
      console.log("eating~",this.name)//封装的比较独立,不会因为外部条件的改变而受到影响
    },
    studying:function(name) {
      console.log("studying~",this.name)
    }
  }

  info.eating()
  info.running()
  info.studying()

2.1.3 this指向什么呢?

目前掌握两个this的判断方法:

  • 在全局环境下面,以默认的方式调用用一个函数,this指向WIndow
  • 通过对象调用,this指向调用的对象
function foo() {
console.log(this)//window
}
var obj = {
bar:function() {
console.log(this)//obj
}
}
obj.bar()

原文地址:https://blog.csdn.net/Yihong1833100198/article/details/143724458

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!