-
Notifications
You must be signed in to change notification settings - Fork 8.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
zh-cn: sync the translation of 'inheritance and the prototype chain' #24216
zh-cn: sync the translation of 'inheritance and the prototype chain' #24216
Conversation
Preview URLs (7 pages)Flaws (2)Note! 5 documents with no flaws that don't need to be listed. 🎉 URL:
URL:
External URLs (2)URL:
(comment last updated: 2024-11-10 06:41:35) |
…/index.md Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
files/zh-cn/web/javascript/inheritance_and_the_prototype_chain/index.md
Outdated
Show resolved
Hide resolved
files/zh-cn/web/javascript/inheritance_and_the_prototype_chain/index.md
Outdated
Show resolved
Hide resolved
files/zh-cn/web/javascript/inheritance_and_the_prototype_chain/index.md
Outdated
Show resolved
Hide resolved
files/zh-cn/web/javascript/inheritance_and_the_prototype_chain/index.md
Outdated
Show resolved
Hide resolved
// o.[[Prototype]].[[Prototype]].[[Prototype]] 为 null,停止搜索, | ||
// 未找到该属性,返回 undefined。 | ||
``` | ||
|
||
给对象设置属性会创建自有属性。获取和设置行为规则的唯一例外是当它被 [getter 或 setter](/zh-CN/docs/Web/JavaScript/Guide/Working_with_objects#定义_getter_与_setter) 拦截时。 | ||
|
||
同理,你可以创建更长的原型链,并在原型链上查找一个属性。 | ||
同理,你可以创建更长的原型链,并在所有的原型上查找属性。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这里的 them 是指“原型”吗,不应该是“原型链”吗。
之后的内容修改也请再考虑一下,可以删去可能不太有必要的修改。
关于标题,我对 mdn 中所有的文档进行了替换。 |
我觉得我应该为之前的回应表达一下歉意。我觉得我应该是带着解决方案和你沟通。不用纠结过去是什么样子的,而是想法子让未来更好。 @yin1999 |
files/zh-cn/web/javascript/inheritance_and_the_prototype_chain/index.md
Outdated
Show resolved
Hide resolved
@@ -216,8 +215,8 @@ box.getValue(); // 2 | |||
|
|||
有个推论是:_重新赋值_ `Constructor.prototype`(`Constructor.prototype = ...`)是一个不好的主意,原因有两点: | |||
|
|||
- 在重新赋值之前创建的实例的 `[[Prototype]]` 现在引用的是与重新赋值之后创建的实例的 `[[Prototype]]` 不同的对象——改变一个的 `[[Prototype]]` 不再改变另一个的 `[[Prototype]]`。 | |||
- 除非你手动重新设置 `constructor` 属性,否则无法再通过 `instance.constructor` 追踪到构造函数,这可能会破坏用户期望的行为。一些内置操作也会读取 `constructor` 属性,如果没有设置,它们可能无法按预期工作。 | |||
- 在重新赋值之前创建的实例的 `[[Prototype]]` 引用的对象现在与重新赋值之后创建的实例的 `[[Prototype]]` 引用的对象不同——改变一个的 `[[Prototype]]` 不会改变另一个的 `[[Prototype]]`。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这里强调的应该是“现在引用的”而部署“现在与 xxx 不一样”
- 在重新赋值之前创建的实例的 `[[Prototype]]` 现在引用的是与重新赋值之后创建的实例的 `[[Prototype]]` 不同的对象——改变一个的 `[[Prototype]]` 不再改变另一个的 `[[Prototype]]`。 | ||
- 除非你手动重新设置 `constructor` 属性,否则无法再通过 `instance.constructor` 追踪到构造函数,这可能会破坏用户期望的行为。一些内置操作也会读取 `constructor` 属性,如果没有设置,它们可能无法按预期工作。 | ||
- 在重新赋值之前创建的实例的 `[[Prototype]]` 引用的对象现在与重新赋值之后创建的实例的 `[[Prototype]]` 引用的对象不同——改变一个的 `[[Prototype]]` 不会改变另一个的 `[[Prototype]]`。 | ||
- 除非你手动重新设置 `constructor` 属性,否则无法再通过 `instance.constructor` 追踪到构造函数,这可能会打破用户期待。一些内置操作也会读取 `constructor` 属性,如果没有设置,它们可能无法按预期工作。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
我更喜欢原翻译
files/zh-cn/web/javascript/inheritance_and_the_prototype_chain/index.md
Outdated
Show resolved
Hide resolved
</tr> | ||
</tbody> | ||
</table> | ||
在[对象初始化器](/zh-CN/docs/Web/JavaScript/Reference/Operators/Object_initializer)中使用 `__proto__` 键时,将 `__proto__` 键指向非对象的值(译者注:`null` 不会被忽略)只会被忽略,而非抛出异常。与 [`Object.prototype.__proto__`](/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/proto) 的 setter 相反,对象字面量初始化器中的 `__proto__` 是标准化的、被优化的,甚至比 {{jsxref("Object.create")}} 更高效。在创建对象时声明额外的自有属性比 {{jsxref("Object.create")}} 更符合习惯。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
请不要添加“译者注”:
- 如果这些内容很重要,那么我们应该将其反馈到上游
- 这些技术要点并没有被相关领域的专家审查(本地化团队更多的是专注于内容翻译)
files/zh-cn/web/javascript/inheritance_and_the_prototype_chain/index.md
Outdated
Show resolved
Hide resolved
与对象初始化器中的 `__proto__` 键类似,`Object.create()` 允许在创建时直接设置对象的原型,这允许运行时进一步优化对象。还允许使用 `Object.create(null)` 创建原型为 `null` 的对象。`Object.create()` 的第二个参数能精确地指明新对象中每个属性地特性,而这会是一把双刃剑: | ||
|
||
- 它能在对象创建期间创建不可枚举的属性,而这用对象字面量做不到。 | ||
- 它比对象字面量更加冗余以及更容易出错。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
冗余和冗长的意思不同,请考虑一下
- 它比对象字面量更加冗余以及更容易出错。 | |
- 它比对象字面量更加冗长以及更容易出错。 |
files/zh-cn/web/javascript/inheritance_and_the_prototype_chain/index.md
Outdated
Show resolved
Hide resolved
</tr> | ||
</tbody> | ||
</table> | ||
与 `Object.setPrototypeOf` 相比,将 `__proto__` 设置为非对象的值(译者注:`null` 不会被忽略)只会被忽略,而非抛出异常。它也只有稍微好一点的浏览器支持。然而,它是非标准的,并且已废弃。你应该几乎总是使用 `Object.setPrototypeOf` 作为代替。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
请不要添加译者注,上面解释过了
|
||
对于 Java 或 C++ 的开发者来说,JavaScript 可能有点令人困惑,因为它是完全动态、完全是在执行期间确定的,而且根本没有静态类型。一切都是对象(实例)或函数(构造函数),甚至函数本身也是 `Function` 构造函数的实例。即使是语法结构中的“类”也只是运行时的构造函数。 | ||
|
||
JavaScript 中的所有构造函数都有一个被称为 `prototype` 的特殊属性,它与 `new` 运算符一起使用。对原型对象的引用被复制到新实例的内部属性 `[[Prototype]]` 中。例如,当你执行 `const a1 = new A()` 时,JavaScript(在内存中创建对象之后,为其定义 `this` 并执行 `A()` 之前)设置 `a1.[[Prototype]] = A.prototype`。然后,当你访问实例的属性时,JavaScript 首先检查它们是否直接存在于该对象上,如果不存在,则在 `[[Prototype]]` 中查找。会*递归*查询 `[[Prototype]]`,即 `a1.doSomething`、`Object.getPrototypeOf(a1).doSomething`、`Object.getPrototypeOf(Object.getPrototypeOf(a1)).doSomething`,以此类推,直至找到或 `Object.getPrototypeOf` 返回 `null`。这意味着在 `prototype` 上定义的所有属性实际上都由所有实例共享,并且甚至可以更改 `prototype` 的部分内容,使得更改被应用到所有现有的实例中。 | ||
JavaScript 中的所有构造函数都有一个称作 `prototype` 的特殊属性,它与 `new` 运算符一起使用。原型对象的引用复制到新实例的内部属性 `[[Prototype]]` 中。例如,当你执行 `const a1 = new A()` 时,JavaScript(在内存中创建对象之后,用为对象定义的 `this` 运行 `A()` 之前)设置 `a1.[[Prototype]] = A.prototype`。然后,当你访问实例的属性时,JavaScript 首先检查它们是否直接在该对象上存在,如果不存在,则在 `[[Prototype]]` 中查找。会*递归*查询 `[[Prototype]]`,即 `a1.doSomething`、`Object.getPrototypeOf(a1).doSomething`、`Object.getPrototypeOf(Object.getPrototypeOf(a1)).doSomething`,以此类推,直至找到或 `Object.getPrototypeOf` 返回 `null`。这意味着在 `prototype` 上定义的所有属性实际上都由所有实例共享,并且甚至可以更改 `prototype` 的部分内容,使得更改被应用到所有现有的实例中。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(这一段)感觉可不作修改
我的意思是,你给出的翻译是存在不一致的问题的(你的翻译有“属性 x”,也有“x 属性”)
的确不用纠结过去是什么样的,只是我希望减少一些“可能是无太多必要的修改”,因为修改意味着额外的检查(因为修改不能确保一定正确)。要考虑一点,当贡献者翻译完一篇文档后,审查人员几乎需要付出同等的时间来对内容进行审查。但是活跃的贡献者数量目前是多于活跃的审查人员的。 我更希望的是,比如我们看到一句话的翻译可能会让人误解,或者使用的辞藻不够完善优美(引人注意),那么我们在有更好的想法时可以对其进行修改。 |
…/index.md Co-authored-by: A1lo <[email protected]>
…/index.md Co-authored-by: A1lo <[email protected]>
…/index.md Co-authored-by: A1lo <[email protected]>
…/index.md Co-authored-by: A1lo <[email protected]>
我很能理解你的心情。我现在感知到的是:我能敏锐的注意到存在错误的地方以及需要改善的地方。 |
files/zh-cn/web/javascript/inheritance_and_the_prototype_chain/index.md
Outdated
Show resolved
Hide resolved
…/index.md Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
对你之前提到的所有评论意见做了相应的调整。我认可的地方是调整回原有的翻译(例如,“x 属性”还是“属性 x”,我遵循的就是英文表述的顺序);我存在不同意见的地方,也给出了相应的回应。也请你考虑一下我的想法。 |
还有上面提到过的问题没有得到解决(其他没问题了):#24216 (comment) |
已处理。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @familyboat
Description
英文版有更新,对中文版进行同步。
Motivation
Additional details
Related issues and pull requests