一、实现JS模拟手工点击事件
Event:事件 + dispatchEvent:派发事件
var ev = new Event('click', { bubbles: false, cancelable: false });
window.dispatchEvent(ev);
// 事件可以在任何元素触发,不仅仅是document
myDiv.dispatchEvent(ev);
二、默认事件、阻止冒泡和阻止事件传播(后续添加描述)
1.默认事件
event.preventDefault(); //默认事件
2.冒泡
event.stopPropagation(); //冒泡
3.事件传播
event.stopImmediatePropagation(); //捕获
三、克隆一个类的实例(尝试好像并没有Clone成功)
单行代码实现
类的实例的克隆
let clone = Object.assign( Object.create( Object.getPrototypeOf(orig)), orig)
它避免设置原型,因为他们说这会大大降低代码速度。
它支持符号,但不适用于getter / setter方法,并且不适用于不可枚举的属性(请参见Object.assign()docs)。此外,可悲的是,克隆基本内部类(例如Array,Date,RegExp,Map等)似乎经常需要一些单独的处理。
四、Object 赋值和复制
let obj = {
name: '张三',
};
// -----------------------------JSON.parse-------------------------------------
let a = JSON.parse(JSON.stringify(obj));
console.log(a.name); //--复制了数据
// ------------------------------Object.getOwnPropertyDescriptors--------------
let b = Object.getOwnPropertyDescriptors(obj) as { name: string };
console.log((b.name = 'hhhh')); // --- 修改了原数据
// ---------------------------------Object.assign------------------------------
let clone = Object.assign(
Object.create(Object.getPrototypeOf(obj)),
obj
);
console.log((clone.name = '测试????')); // --- 修改了原数据
// ----------------------------------Object.assign-----------------------------
let x = {} as { name: string };
Object.assign(x, obj);
console.log(x.name); // --- 修改了原数据
// ------------------------------for--in----------------------------------------
let D = {} as { name: string };
for (const key in obj) {
D[key] = obj[key];
}
console.log(D); //--复制了数据