原型链与自有属性基础
了解原型链基础;检查自有属性与继承属性的区别;使用 Object.create;设置简单的属性描述符
原型链与自有属性基础 是 CoddyKit 上的免费 JavaScript Academy 课时。 这是第 1 节课,共 2 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 JavaScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 JavaScript Academy 课程共包含 2 节课。
原型简介
目标:了解对象如何通过原型链继承,以及如何区分自有键和继承键。
- 原型链
- hasOwn 与 in
- Object.create
- 基本属性描述符

原型查找
如果对象上找不到某个键,JavaScript 就会查找它的原型(例如 Object.prototype)。
// A simple object
const user = { name: "Ayla" };
// The prototype is another object used for fallback lookups
const proto = Object.getPrototypeOf(user);
console.log("name:", user.name);
console.log("has toString?", typeof user.toString === "function");
console.log("proto same as Object.prototype?", proto === Object.prototype);

自有属性与继承属性
Object.hasOwn(obj, key) 只有在键属于对象自身时才返回 true。“key” in obj 会将继承的键也包括在内。
// Own vs inherited checks
const point = { x: 1 };
// "in" sees own or inherited
console.log("x in point:", "x" in point);
console.log("toString in point:", "toString" in point);
// Only own keys
console.log("hasOwn x:", Object.hasOwn(point, "x"));
console.log("hasOwn toString:", Object.hasOwn(point, "toString"));

Object.create 基础
Object.create(proto) 创建一个继承自 proto 的对象。
// Use Object.create to set a prototype
const animal = { kind: "animal" };
// pet inherits from animal
const pet = Object.create(animal);
pet.name = "Milo";
console.log("pet name:", pet.name);
console.log("pet kind (inherited):", pet.kind);
console.log("hasOwn kind?", Object.hasOwn(pet, "kind"));

属性描述符(基础)
Object.defineProperty 可以为某个键设置 可写 和 可枚举 等标志。
// Define simple descriptors
const prefs = {};
Object.defineProperty(prefs, "theme", {
value: "dark",
writable: false,
enumerable: true
});
// Try to change (silently fails in non-strict)
prefs.theme = "light";
console.log("theme:", prefs.theme);
// List keys: theme is enumerable
console.log("keys:", Object.keys(prefs));

提示与检查清单
提示:
- 使用 Object.hasOwn(obj, key) 检查自有键。
- 优先使用 Object.create(proto) 创建小型原型。
- 一开始尽量少使用属性描述符;使用默认值即可。

自有属性与继承属性测验
快速检查:自有属性测试。

复习
复习:引擎会在原型上查找缺失的键。仅对自有键使用 hasOwn,使用 Object.create 设置原型,并使用属性描述符控制基本标志。

常见问题解答
「原型链与自有属性基础」课时是免费的吗?
是的 — 「原型链与自有属性基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 JavaScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 JavaScript Academy 课程共包含 2 节课。
「原型链与自有属性基础」这节课中我会学到什么?
了解原型链基础;检查自有属性与继承属性的区别;使用 Object.create;设置简单的属性描述符 你通过在浏览器中直接运行的动手代码来练习 JavaScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 JavaScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 JavaScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 2 节。
「原型链与自有属性基础」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 JavaScript Academy 课中编写并运行代码吗?
能。每节 JavaScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 原型链与自有属性基础
- 类语法(预览):构造函数、方法、静态成员、继承