Object.defineProperty()
Object.defineProperty()方法---为对象添加属性---Vue的源码中经常用到
// Object.defineProperty()方法---为对象添加属性---Vue的源码中经常用到
const person = {
firstName: '呼呼',
lastName: '憨憨'
}
// // 为某个对象添加一个属性,并对该属性进行一些配置操作
Object.defineProperty(person, 'fullName', {
configurable: false, //默认是不能被删除false(属性相关的操作)
enumerable: true, //默认是false,能否被枚举遍历
//value:'自己填写默认值' //默认值
//writable.false, //默认是false,能否被修改--重写
// 获取(读取),外部在获取fullName这个属性的时候,会进入到这个get方法
get() {
return this.firstName + '_' + this.lastName
},
// 设置(写入),外部在为fullName这个属性赋值的时候,会进入到这个set方法
set(val) {
const names = val.split('_') //根据_下划线拆分数组
this.firstName = names[0] //拆分为--呼呼
this.lastName = names[1] //拆分为-- 憨憨
}
})
//// 当前对象中添加了一个属性
person.fullName = person.firstName + '_' + person.lastName
console.log(person.fullName) //打印出-->呼呼_憨憨
person.fullName = '上官_婉儿'
console.log(person.firstName, person.lastName) // 打印出---> 上官 婉儿
person.firstName = '西门'
person.lastName = '大郎'
console.log(person.fullName) //打印出--> 西门_大郎
Object.create()
// 姓氏 和 名字 -----> 姓名 ,任意一个变化,其他的也应该自动的变化
function Person() {}
Person.prototype.sayHi = function() {
console.log('hello baby')
}
//
function Student() {}
////Student的原型指向改变了,指向了 Person的实例对象
const per = new Person()
Student.prototype = per
////实例化Student
const stu = new Student()
stu.sayHi() // 打印--hello baby'
console.log(Student.prototype === per) //打印 true
console.log(stu.__proto__ === Student.prototype) //打印 true
// // stu的隐式原型指向了per实例对象
console.log(stu.__proto__ === per) //打印 true
////------------ //Object.create()--------
const person = {
name: '小明',
eat: function() {
console.log('小明最有名的童鞋')
}
}
//// 设置stu对象的隐式原型指向了person对象
const stu = Object.create(person)
console.log(stu.name) // 打印----小明
stu.eat() //打印---小明最有名的童鞋
console.log(stu.__proto__ === person) //true