javascript 对象的细节_卡吧不死机-编程思维

对象的集中声明方式//方式一:let stu = {  name:'小明',

  age:'17',
  study:function(){
      console.log(this.name + '爱学习')
  }  
}
// 调用方式:
stu.name;
stu.study();

//方式二: let name='小明'; let age=17; let study = function(){ console.log(this.name + '爱学习')} let stu = {name,age,study} //直接在对象内部写变量名,就相当于变量名是name,变量值是'小明' //调用方式跟方式一是一致
//方式三: (重点掌握,用的最多的!) let stu = { name:'小明', age:'17', study(){ //对象内可以将function 和 :都拿掉,但这种写法只能在对象内 console.log(this.name + '爱学习') } }

调用对象中的属性

// 对象的定义结构

let obj = {
  属性名:值,
  方法名:函数,
  get 属性名(){}
  set 属性名(新值){}   
}

//属性如何用get和set读取和赋值

let stu = {
  //下划线只是一个约定 _name:
null,//加下划线类似于java中的私有属性 ,但不是真的不能调用,std._name是有值的,但是不走get方法 get name() { return this._name}, set name(name){ this._name = name} } // 调用: std.name = '小白' //这里相当于赋值操作调用了set name方法 console.log(std.name) // 这样就相当于调用了get name方法

javascript特色:属性可以增、删

java的对象是以类为模板,里面的属性和方法都是固定的,但是javascript可以动态增加和删除里面的元素!

// 可以增加里面的属性

let stu = {name:'张三'}

stu.age = 18 //增加属性
console.log(stu)//打印结果 :{name='张三',age:18}

// 可以删除里面的属性
delete std.age
//打印结果 :{name='张三'}
// 可以增加函数
std.study = function(){...}

//用defineProperty动态定义函数get和set方法
let sud={
  _name:null
}
Object.defineProperty(std,"name",{
  get(){ return this._name},
  set(name){this._name = name}
})

javascript中的this对象:有下面三种情况——落单函数、作为对象的方法、以及动态改变this

 

 

 其中有一个例外的情况,在箭头函数内出现的this,以外层的this理解

用匿名函数的时候,第1个this代表对象本身,因为在对象内部定义,所以可以读取friends数组

第2个this定义在一个落单函数内部,所以this属于window,window的name属性是空字符,所以打印

”与小白在玩耍“

”与小黑在玩耍“

”与小明在玩耍“

 

 

 

 

那么怎么让第2个this读取stu对象中的name而不是window中的name呢?

这里用箭头函数解决,箭头函数的this默认使用外层的this而不是window对象,这里外层就是stu对象。

还有一种不使用箭头函数,解决this调用外层对象的方法:这种方法多出现在没有发明箭头函数之前会经常这样使用。

 

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://www.cnblogs.com/tangwei-fuzhou/p/16707354.html