咳咳,各位,今天咱们聊点刺激的——JavaScript 中 __proto__ 这个小家伙。别看它名字里带俩下划线,好像很神秘,但用不好,它可是性能杀手!今天咱们就把它扒个精光,看看它怎么作妖,以及怎么优雅地避开它挖的坑。 一、__proto__ 是个啥?(以及它为什么这么“拽”) 简单来说,__proto__ 是一个对象内部的属性,指向该对象的原型对象。原型对象又是啥?你可以把它想象成一个模具,对象就是从这个模具里印出来的。 // 举个栗子: const animal = { name: ‘动物’, eat: function() { console.log(‘吃东西’); } }; const dog = { name: ‘旺财’, bark: function() { console.log(‘汪汪汪’); } }; // 让 dog 继承 animal 的属性和方法 dog.__proto__ = animal; console.log(dog.name); // 输出:旺财 (dog 自己的属性) console.log(dog.eat()); // 输出:吃东西 (从 an …
JS `__proto__` 与 `prototype` 属性的本质区别与性能影响
各位观众老爷们,大家好!今天咱们就来聊聊 JavaScript 里这对让人头大的兄弟:__proto__ 和 prototype。它们长得像,名字也像,但用法和意义却大相径庭。咱们今天就用大白话,把它们扒个底朝天,顺便再聊聊性能上的那点事儿。 开场白:祖传秘方与族谱 想象一下,prototype 就像是你们家的祖传秘方,记载了做菜的独门绝技。而 __proto__ 呢,更像是你个人的族谱,记录了你从哪家哪户继承了这些绝技。虽然都跟家族血脉有关,但用途和意义可不一样。 第一幕:prototype – 构造函数的秘密武器 首先,我们要明确一点:prototype 属性只有函数才有! function Person(name) { this.name = name; } console.log(Person.prototype); // 输出: {constructor: ƒ} 看到了吗?Person.prototype 存在,而且是一个对象。这个对象是干嘛的呢? 创造实例的蓝图: Person.prototype 里面的属性和方法,会被所有通过 new Person() 创建的 …