当前位置: 首页 > news >正文

Lua和JS的继承原理

JavaScript 和 Lua 都是动态语言,支持面向对象编程(OOP),但它们的 继承机制 实现方式不一样。下面分别介绍它们的继承实现原理和方式:


🔶 JavaScript 的继承机制

JavaScript 使用的是 基于原型(prototype-based) 的继承。

✅ ES5 的继承(原型链继承)

function Animal(name) {this.name = name;
}
Animal.prototype.sayHi = function () {console.log("Hi, I'm " + this.name);
};function Dog(name) {Animal.call(this, name);  // 构造函数继承
}
Dog.prototype = Object.create(Animal.prototype);  // 原型继承
Dog.prototype.constructor = Dog;  // 修正构造器指向let dog = new Dog("Buddy");
dog.sayHi();  // 输出:Hi, I'm Buddy

✅ ES6 的继承(class 语法)

class Animal {constructor(name) {this.name = name;}sayHi() {console.log(`Hi, I'm ${this.name}`);}
}class Dog extends Animal {constructor(name) {super(name);}
}const dog = new Dog("Buddy");
dog.sayHi();  // 输出:Hi, I'm Buddy

✅ 本质上,class 只是对原型链语法的封装,底层仍然是原型继承。


🔷 Lua 的继承机制

Lua 没有类(class),但可以通过 table + metatable 来模拟面向对象继承。

✅ 原型式继承

-- 父类
Animal = {}
Animal.__index = Animalfunction Animal:new(name)local obj = {name = name}setmetatable(obj, self)return obj
endfunction Animal:sayHi()print("Hi, I'm " .. self.name)
end-- 子类继承
Dog = setmetatable({}, {__index = Animal})
Dog.__index = Dogfunction Dog:new(name)local obj = Animal.new(self, name)setmetatable(obj, self)return obj
endlocal dog = Dog:new("Buddy")
dog:sayHi()  -- 输出:Hi, I'm Buddy

__index 是 Lua 实现继承和查找“父类”字段的关键。


🔁 对比总结

特性JavaScriptLua
面向对象支持内建 class(ES6 起)+ 原型链依赖 table + metatable 自己实现
继承机制基于 prototype 原型链基于 __index 的原型式继承
实现方式Object.create() / class extendssetmetatable(table, {__index = parent})
多继承支持不支持可模拟多继承(手动组合多个 __index)

相关文章:

  • 后台管理系统八股
  • Python应用continue关键字初解
  • 前端验证下跨域问题(npm验证)
  • 隧道监测预警系统:构筑智慧交通的安全中枢
  • 香橙派3B学习笔记6:基本的Bash脚本学习_UTF-8格式问题
  • 定时线程池失效问题引发的思考
  • 前端导入Excel表格
  • 提升系统稳定性和可靠性的特殊线程(看门狗线程)
  • CppCon 2014 学习:Lightning Talk: Writing a Python Interpreter for Fun and Profit
  • 浮点数的位级表示转变为二进制表示
  • 数组-差分数组抽象版
  • 【Redis】笔记|第7节|大厂生产级Redis高并发分布式锁实战(二)
  • 风机巡检方案艰难之路
  • 基于TI DSP控制的光伏逆变器最大功率跟踪mppt
  • 【Zephyr 系列 5】定时器与低功耗控制:打造省电高效的嵌入式系统
  • Windows 下部署 SUNA 项目:虚拟环境尝试与最终方案
  • 数据生命线 - MySQL 备份与恢复策略详解
  • ADI硬件笔试面试题型解析上
  • VueScan:全能扫描,高清输出
  • STM32学习之WWDG(原理+实操)
  • 做视觉影像网站用什么软件系统/网店推广网站
  • 本地电脑做网站服务器/做一个网站要多少钱
  • 网络销售网站外包/百度信息流怎么做效果好
  • wordpress 效率/关键词推广seo怎么优化
  • 可以做任务的网站/营销活动策划方案
  • 做网站的技术员/企业做个网站多少钱