Prefacio
En JavaScript, podemos simular la herencia manipulando prototipos.
Antes de aprender la herencia, debemos comprender los objetos prototipo en el siguiente JavaScript.
1. La diferencia entre __prto__ y prototype
Los objetos que tienen _proto_
propiedades pueden denominarse " "prototipos . El prototipo implícito de un objeto apunta al prototipo de la función constructora que construyó el objeto, lo que también asegura que la instancia pueda acceder a las propiedades y métodos definidos en el prototipo de la función constructora.
El método de este tema en particular, además de tener las _proto_
propiedades anteriores , prototype
las propiedades únicas del método.
Cuando creamos una instancia de un objeto, el _proto_
atributo del objeto apunta a los prototype
atributos de función predeterminados .
function Person(name){
this.name = name;
this.sayName = function(){
console.log(`我叫${
this.name}`)
}
}
var person1 = new Person();//实例化Person构造方法
var person2 = new Person();
t.__proto__ === test.prototype;// true
Mecanismo de operación de código:
- Después de crear un constructor personalizado, su objeto prototipo solo tendrá propiedades de constructor por defecto , y otras propiedades y métodos se heredan de Object.
La propiedad del constructor devuelve el cuerpo de la función que creó este objeto.
- Cuando se llama al constructor para crear una nueva instancia, el interior de la instancia contendrá un puntero al objeto prototipo del constructor. ECMA5 llama a este puntero [[prototipo]] . Aunque no existe una forma estándar de acceder a [[prototype]] en scripts, en Firefox, Safari y Chrome, el atributo __proto__ es la implementación de acceder a [[prototype]] . En Internet Explorer, este atributo es completamente invisible. Pero el punto real que debe quedar claro es que esta conexión existe entre el objeto de instancia y el objeto prototipo del constructor ( es decir, el nombre del constructor.prototype ), no entre la instancia y el constructor.
heredar
// 定义一个Person类
function Person(name, age) {
this.name = name;
this.age = age;
//定义一个info函数
this.info = function() {
document.writeln("年龄" + this.age + "姓名" + this.name);
}
}
//创建Person类的实例对象
var p1 = new Person('xiaoming', 20);
//调用p1的info方法
p1.info();
//为Person类增加walk方法
Person.prototype.walk = function() {
document.writeln(this.name + '正在走<br/>');
}
var p2 = new Person('xiaohong', 20);
//p2可以调用Person中的方法
p2.info();
//也可以调用prototype属性增加的方法
p2.walk();
//JS允许为类动态增加方法和属性,这里p1也可以调用walk
p1.walk();
Las propiedades o métodos agregados al prototipo del objeto y el objeto constructor de la instancia pueden acceder a las cosas en su prototipo. De esta manera, se realiza la "industria del padrastro infantil".
referencia
CSDN: [[https://blog.csdn.net/q5706503/article/details/82947977]]