对象的集中声明方式//方式一: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调用外层对象的方法:这种方法多出现在没有发明箭头函数之前会经常这样使用。
标签:name,get,对象,javascript,stu,细节,let,属性 From: https://www.cnblogs.com/tangwei-fuzhou/p/16707354.html