对象的引用方法和创建,精心讲解。JavaScript底层基础

98 阅读1分钟

对象的引用

let obj={
    name :'零',
    age: 20
}
// console.log(obj.name);
obj.age = 18          
 obj.girlFriend = '小红' 
let n = 'girlFriend'
obj[n] = '小红'        //girlFriend: '小红' 

delete obj[n]          // 删除

console.log(obj);

第一个会打印对象中初始定义的‘零’。往对象添加了一个变量obj.girlFriend = '小红'let n = 'girlFriend',去引用这个小红时,如果obj.n = '小红' 这样只会有n:'小红'

想要打印{ name: '零', age: 18, girlFriend: '小红' }可以使用obj[n] = '小红'
这时如果想要删除对象中新添加的这个属性可以使用delete obj[n]

对象的创建

下面两种创建方法完全没区别

var obj1 = {} //对象字面量

var obj2 = new Object(); //构造函数

第三种,自定义构造函数

function Car(){
  this.name = 'BMW'
  this.height = 1400        //this是对象(this.name  obj.name)
  this.lang = 4900
  this.weight = 1000
}
let car = new Car()
console.log(car);

如果没有let car = new Car(),没有return值,直接打印Car()会表示undefined。 有了之后就可以打印Car里面的属性

function Car(color){
   this.color = color
  this.name = 'BMW'
  this.height = 1400        //this是对象(this.name  obj.name)
  this.lang = 4900
  this.weight = 1000
}

let car = new Car('green')   
let car2 = new Car('pink')   
// console.log(car);
car.name = '劳斯莱斯'       //改了名字,car2不受影响
console.log(car2);

如果添加一个color自变量,在Car(color)后只需要 this.color = color就可以let car = new Car('green')直接传属性。car能调用this.name是因为 car为实例对象 == this
为什么添加了new就可以打印对象里面的东西呢,他也没有return值啊?

new 相当于创建了一个var this={}并添加了属性和return this ; car为实例对象 == this。

那我定义了两个car和car2,为什么我改了car的name后var this={}没有让car2的name改变呢?

因为new一次就会得到一个新的对象,所以car和car2不是共用一个var this={}