自己随手写的,有问题还请多多指教。
defineProperty
劫持变量的set和get方法
let value = "abc";
let timer;
const input = document.getElementsByTagName("input")[0];
const p = document.getElementsByTagName("p")[0];
p.innerHTML = value;
input.value = value;
Object.defineProperty(p, "value", {
get() {
return value;
},
set(val) {
value = val;
p.innerHTML = val;
}
})
input.onkeyup = function(e) {
clearTimeout(timer);
timer = setTimeout(function() {
p.value = e.target.value;
}, 1000)
}
assign
将第二个对象的属性合并到第一个对象里面,对象深拷贝可以考虑。(一维对象可以考虑拷贝)
const obj = { name: "123" };
let a = Object.assign({}, obj);
let b = Object.assign({}, obj);
cerate
方法创建一个新对象,是新对象的proto 指向传入目的对象
const obj = {
name: "wzm",
fild: {
one: "1",
two: "2"
}
}
let newObj = Object.create(obj);
也可以实现原型链的继承
function person() {
this.sex = "man";
}
person.prototype.getSex = function() {
console.log(this.sex);
}
function student() {
}
function teacher() {
}
student.prototype = new person();
student.prototype.constructor = student;//重写函数的原型对象时候 为了严谨要添加构造函数;原型对象生成一个constructor属性,指向原型所在函数
这个属性作用 记录的就是对象的构造器,里面存的就是构造函数。
teacher.prototype = Object.create(person.prototype);
teacher.prototype.constructor = teacher;
let stu = new student();
let teach = new teacher();
二者实现方式的区别:new会继承父函数构造函数身上的属性和方法 Object.create 只会继承父函数原型上的方法和属性
网友评论