当前位置:首页 > JavaScript

js 实现原型

2026-04-06 04:33:45JavaScript

原型的基本概念

在JavaScript中,每个函数都有一个prototype属性,指向一个对象。这个对象是构造函数的原型,所有通过该构造函数创建的实例都可以共享原型上的属性和方法。

原型链的机制

当访问一个对象的属性或方法时,JavaScript会先在对象自身查找。如果找不到,会沿着原型链向上查找,直到找到或到达原型链的末端(null)。

实现原型继承

构造函数与原型

定义一个构造函数时,可以通过prototype属性为其添加共享的属性和方法。

js 实现原型

function Person(name) {
  this.name = name;
}

Person.prototype.sayHello = function() {
  console.log(`Hello, my name is ${this.name}`);
};

const person1 = new Person('Alice');
person1.sayHello(); // 输出: Hello, my name is Alice

原型链继承

通过将子类的原型设置为父类的实例,可以实现原型链继承。

function Parent(name) {
  this.name = name;
}

Parent.prototype.sayName = function() {
  console.log(this.name);
};

function Child(name, age) {
  Parent.call(this, name);
  this.age = age;
}

Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;

const child = new Child('Bob', 10);
child.sayName(); // 输出: Bob

ES6的class语法

ES6引入了class语法,简化了原型继承的实现。

js 实现原型

class Parent {
  constructor(name) {
    this.name = name;
  }

  sayName() {
    console.log(this.name);
  }
}

class Child extends Parent {
  constructor(name, age) {
    super(name);
    this.age = age;
  }
}

const child = new Child('Charlie', 12);
child.sayName(); // 输出: Charlie

原型相关方法

Object.create()

创建一个新对象,使用现有对象作为新对象的原型。

const parent = {
  greet() {
    console.log('Hello from parent');
  }
};

const child = Object.create(parent);
child.greet(); // 输出: Hello from parent

Object.getPrototypeOf()

获取指定对象的原型。

const obj = {};
console.log(Object.getPrototypeOf(obj) === Object.prototype); // 输出: true

Object.setPrototypeOf()

设置指定对象的原型。

const obj1 = { a: 1 };
const obj2 = { b: 2 };
Object.setPrototypeOf(obj1, obj2);
console.log(obj1.b); // 输出: 2

注意事项

  • 避免直接修改__proto__属性,使用Object.setPrototypeOf()更安全。
  • 原型链过长会影响性能,需谨慎设计继承层次。
  • 在ES6中,优先使用classextends实现继承,代码更清晰易读。

标签: 原型js
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…