📅  最后修改于: 2023-12-03 15:22:51.165000             🧑  作者: Mango
在Javascript中,每个对象都有一个原型,或称为 prototype
。原型充当了对象的基本模板,定义了对象的默认属性和方法,可以被继承或复制。
创建原型的方法是通过构造函数,构造函数利用 prototype
属性添加方法和属性。
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.talk = function() {
console.log("Hello, my name is " + this.name);
};
let john = new Person("John", 30);
john.talk(); // Output: "Hello, my name is John"
在上面的例子中,Person
是一个构造函数,它有两个参数:name
和 age
。我们通过 new
操作符创建了一个新的 Person
实例 john
。
接着,我们使用 Person.prototype
来添加方法 talk
,实现一个人物角色的对话功能。最后,我们调用 john.talk()
,输出 Hello, my name is John
。
__proto__
属性每个Javascript对象都有一个 __proto__
属性,用于表示该对象的原型。换句话说,__proto__
属性指向该对象所继承的原型对象。
下面是一个例子,说明 __proto__
的用法。
function Animal() {}
let cat = new Animal();
console.log(cat.__proto__ === Animal.prototype); // Output: true
在上面的例子中,我们创建了一个空的构造函数 Animal
,然后使用 new
操作符创建了一个新的实例对象 cat
。
在 console.log()
方法中,我们将 cat.__proto__
与 Animal.prototype
进行比较,从而确定它们是否相等。因为每个Javascript对象的 __proto__
属性指向其所继承的原型对象,所以当我们比较 cat.__proto__
和 Animal.prototype
时,输出的结果为 true
。
原型链是一条沿着 __proto__
属性向上查找的链接,直到找到一个 null
值。对于Javascript中的每个对象,都可以建立一个原型链。
下面是一个例子,说明原型链的构建方式:
function Animal() {}
function Cat() {}
Cat.prototype = new Animal();
let fluffy = new Cat();
在上面的例子中,我们定义了 Animal
和 Cat
两个构造函数。接着,我们将 Cat.prototype
指向一个新的 Animal
实例,从而创建一个原型链。最后,我们使用 new
操作符创建一个实例对象 fluffy
。
当我们调用 fluffy.toString()
时,Javascript会向上查找 fluffy.__proto__.__proto__
,并在 Animal.prototype
对象中找到 toString()
方法。
在Javascript中,每个对象都有一个原型,或称为 prototype
。原型充当了对象的基本模板,定义了对象的默认属性和方法,可以被继承或复制。
每个Javascript对象都有一个 __proto__
属性,用于表示该对象的原型。换句话说,__proto__
属性指向该对象所继承的原型对象。
原型链是一条沿着 __proto__
属性向上查找的链接,直到找到一个 null
值。对于Javascript中的每个对象,都可以建立一个原型链。