TranslucentTB如何让Windows任务栏焕然一新?透明化美学的全面解析
2026/6/10 23:47:01
getUser(),直接调用,返回数据 / 执行逻辑例如:
function getUser (name) { retrun {name}; }User(),必须用new调用,用来创建对象例如:
// 构造函数(大驼峰命名) function Person(name, age) { // 自身属性 this.name = name; this.age = age; }{}__proto__指向构造函数的prototypethis指向这个空对象// 1. 先定义一个构造函数 function Person(name, age) { // 步骤3执行时,this 会变成我们创建的空对象 this.name = name; this.age = age; } // ------------------------------ // 核心:手写模拟 new 的4大步骤 // ------------------------------ function myNew(constructor, ...args) { // 步骤1:创建一个空对象 {} const obj = {}; // 步骤2:空对象的 __proto__ 指向构造函数的 prototype obj.__proto__ = constructor.prototype; // 步骤3:执行构造函数,让 this 指向这个空对象 // call 的作用:把构造函数里的 this 改成 obj const result = constructor.call(obj, ...args); // 步骤4:如果构造函数没有返回对象,就返回我们创建的 obj if (result && typeof result === "object") { return result; } else { return obj; } } // ------------------------------ // 测试使用 // ------------------------------ const p1 = myNew(Person, "小明", 18); console.log(p1); // Person { name: '小明', age: 18 } console.log(p1.name); // 小明new 构造函数()→ 得到实例对象const a = new Person("XIAO MIN", 20);const b = new Person("XIAO HUA", 29) console.log(a); // Person { name: 'XIAO MIN', age: 20 } console.log(b); // Person { name: 'XIAO HUA', age: 29 }this.xxx挂载的属性,每个实例独立拥有console.log(a.name); // XIAO MIN Person.prototype.pName = "Person" console.log(a.pName); // Person构造函数.prototype上,所有实例共享console.log(b.name) // XIAO HUA console.log(b.pName) // Person