在 JavaScript 中,每个对象都有一个原型链,通过 prototype
属性来访问。原型链是指当访问对象的属性或方法时,如果当前对象没有这个属性或方法,就会继续向上查找它的原型对象,直到找到为止。
1. constructor 和 prototype
JavaScript 中的构造函数可以使用 prototype
属性来添加共享的属性和方法。例如:
-- -------------------- ---- ------- -------- ------------ - --------- - ----- - ---------------------- - ---------- - ------------------- -- ---- -- ---------------- - ----- ------ - --- ---------------- --------------- -- --- ------- -- ---- -- -------
在这个例子中,我们定义了一个构造函数 Person
,并给它的原型对象上添加了一个 greet
方法。由于 person
是通过 new
关键字创建的 Person
的实例,所以它可以访问 Person.prototype
上的方法 greet
。
2. 继承和原型链
通过 prototype
属性,我们还可以实现对象之间的继承。例如:
-- -------------------- ---- ------- -------- ------------ - --------- - ----- - --------------------- - ---------- - ------------------------- -- ----------- - -------- --------- - ----------------- ------ - ------------- - -------------------------------- ------------------------- - ---- ------------------ - ---------- - ------------------------- -- ----------- - ----- --- - --- ------------ ----------- -- --- ----- -- --------- ----------- -- --- ----- -- ---------
在这个例子中,我们定义了一个 Animal
的构造函数和原型对象,然后通过 Object.create
方法创建了一个新的对象作为 Dog.prototype
,并将其 constructor
属性设置为 Dog
。由于 Dog.prototype
是从 Animal.prototype
对象继承而来的,所以 Dog
实例可以访问 Animal
的方法 walk
。
3. 扩展内置类型
JavaScript 中的内置类型(如 Array
、String
等)也可以使用 prototype
属性来添加新的方法。例如:
String.prototype.reverse = function() { return this.split('').reverse().join(''); } console.log('hello world'.reverse()); // 输出: "dlrow olleh"
在这个例子中,我们给 String.prototype
添加了一个 reverse
方法,它可以反转字符串。
总结
prototype
是 JavaScript 中一个非常重要的概念,可以用于实现对象之间的继承和共享方法。通过了解原型链的工作原理,我们可以更好地理解 JavaScript 中的面向对象编程。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/2465