mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
238 字
1 分钟
javascript原型链
2026-05-03

JavaScript原型链#

1. prototype - 函数的”儿子模板”#

只有函数才有prototype 它是给将来new出来的实例用的。

function Dog(name) {
this.name = name;
}
// prototype是函数的属性,用来给实例共享方法
Dog.prototype.bark = function() {
console.log(this.name + "汪汪汪");
};
var dog1 = new Dog("旺财");
var dog2 = new Dog("来福");
dog1.bark(); // "旺财汪汪汪"
dog2.bark(); // "来福汪汪汪"
// dog1和dog2共享同一个bark方法
// 这个方法存在Dog.prototype里

2. __proto__ - 每个对象的”爸爸”引用#

每个对象都有__proto__,它指向创建这个对象的构造函数的prototype

var dog1 = new Dog("旺财");
// dog1的__proto__指向Dog.prototype
dog1.__proto__ === Dog.prototype; // true
// Dog.prototype的__proto__指向Object.prototype
Dog.prototype.__proto__ === Object.prototype; // true
// Object.prototype的__proto__指向null(原型链尽头)
Object.prototype.__proto__ === null; // true

简单记: __proto__就是”我爹是谁”的指针,顺着它往上找就是原型链。

3. constructor - 指向”创造我的构造函数”#

每个prototype对象都有个constructor属性,指回构造函数自己。

function Dog(name) {
this.name = name;
}
// Dog.prototype.constructor 指向 Dog 自己
Dog.prototype.constructor === Dog; // true
// 所以实例可以通过constructor找到自己的构造函数
var dog1 = new Dog("旺财");
dog1.constructor === Dog; // true
// dog1没有constructor,是顺着__proto__找到Dog.prototype上的constructor

栗子

var arr = [1, 2, 3];
// arr是Array的实例
arr.__proto__ === Array.prototype; // true
// Array.prototype上有所有数组方法
Array.prototype.push; // function push()
Array.prototype.pop; // function pop()
// arr能用这些方法,因为顺着__proto__找到的
arr.push(4); // arr.__proto__.push.call(arr, 4)
// Array.prototype的__proto__指向Object.prototype
Array.prototype.__proto__ === Object.prototype; // true
// Array.prototype.constructor指向Array自己
Array.prototype.constructor === Array; // true
// arr.constructor也是Array
arr.constructor === Array; // true

4.三条链:#

  1. 实例.__proto__构造函数.prototype
  2. 构造函数.prototype.constructor构造函数
  3. 构造函数.prototype.__proto__上一层原型

所以说真正的原型链指的就是prototype。

prototype很简单,没啥区别!就是个普通对象! 唯一特殊的是:用new创建实例时,实例的__proto__会自动指向它。

掌握了原型链,你就能摸清js实现class的底层原理,顺便能干一些偷鸡摸狗的事情🤣

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

javascript原型链
https://fatdog.20060113.xyz/posts/prototype/
作者
神秘大胖狗
发布于
2026-05-03
许可协议
MIT

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00