Skip to content
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

Merged
merged 17 commits into from
Nov 10, 2024

Conversation

familyboat
Copy link
Contributor

Description

英文版有更新,对中文版进行同步。

Motivation

Additional details

Related issues and pull requests

@familyboat familyboat requested a review from a team as a code owner October 24, 2024 15:39
@familyboat familyboat requested review from yin1999 and removed request for a team October 24, 2024 15:39
@github-actions github-actions bot added the l10n-zh Issues related to Chinese content. label Oct 24, 2024
Copy link
Contributor

github-actions bot commented Oct 24, 2024

Preview URLs (7 pages)
Flaws (2)

Note! 5 documents with no flaws that don't need to be listed. 🎉

URL: /zh-CN/docs/Web/JavaScript
Title: JavaScript
Flaw count: 1

  • broken_links:
    • Can't resolve /zh-CN/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain

URL: /zh-CN/docs/Web/JavaScript/Closures
Title: 闭包
Flaw count: 1

  • broken_links:
    • Is currently http:// but can become https://
External URLs (2)

URL: /zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain
Title: 继承与原型链

(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>
@familyboat familyboat marked this pull request as draft October 24, 2024 15:43
@familyboat familyboat marked this pull request as ready for review October 25, 2024 04:01
// o.[[Prototype]].[[Prototype]].[[Prototype]] 为 null,停止搜索,
// 未找到该属性,返回 undefined。
```

给对象设置属性会创建自有属性。获取和设置行为规则的唯一例外是当它被 [getter 或 setter](/zh-CN/docs/Web/JavaScript/Guide/Working_with_objects#定义_getter_与_setter) 拦截时。

同理,你可以创建更长的原型链,并在原型链上查找一个属性
同理,你可以创建更长的原型链,并在所有的原型上查找属性
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里的 them 是指“原型”吗,不应该是“原型链”吗。

之后的内容修改也请再考虑一下,可以删去可能不太有必要的修改。

@familyboat familyboat requested a review from yin1999 November 1, 2024 07:04
@familyboat
Copy link
Contributor Author

familyboat commented Nov 1, 2024

关于标题,我对 mdn 中所有的文档进行了替换。
关于“属性 x”还是“x 属性”没有做调整(我个人偏好一致性)
将一些不必要的修改做了调整。 @yin1999

@familyboat
Copy link
Contributor Author

我觉得我应该为之前的回应表达一下歉意。我觉得我应该是带着解决方案和你沟通。不用纠结过去是什么样子的,而是想法子让未来更好。 @yin1999

@@ -216,8 +215,8 @@ box.getValue(); // 2

有个推论是:_重新赋值_ `Constructor.prototype`(`Constructor.prototype = ...`)是一个不好的主意,原因有两点:

- 在重新赋值之前创建的实例的 `[[Prototype]]` 现在引用的是与重新赋值之后创建的实例的 `[[Prototype]]` 不同的对象——改变一个的 `[[Prototype]]` 不再改变另一个的 `[[Prototype]]`。
- 除非你手动重新设置 `constructor` 属性,否则无法再通过 `instance.constructor` 追踪到构造函数,这可能会破坏用户期望的行为。一些内置操作也会读取 `constructor` 属性,如果没有设置,它们可能无法按预期工作。
- 在重新赋值之前创建的实例的 `[[Prototype]]` 引用的对象现在与重新赋值之后创建的实例的 `[[Prototype]]` 引用的对象不同——改变一个的 `[[Prototype]]` 不会改变另一个的 `[[Prototype]]`。
Copy link
Member

@yin1999 yin1999 Nov 4, 2024

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` 属性,如果没有设置,它们可能无法按预期工作。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我更喜欢原翻译

</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")}} 更符合习惯。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

请不要添加“译者注”:

  1. 如果这些内容很重要,那么我们应该将其反馈到上游
  2. 这些技术要点并没有被相关领域的专家审查(本地化团队更多的是专注于内容翻译)

与对象初始化器中的 `__proto__` 键类似,`Object.create()` 允许在创建时直接设置对象的原型,这允许运行时进一步优化对象。还允许使用 `Object.create(null)` 创建原型为 `null` 的对象。`Object.create()` 的第二个参数能精确地指明新对象中每个属性地特性,而这会是一把双刃剑:

- 它能在对象创建期间创建不可枚举的属性,而这用对象字面量做不到。
- 它比对象字面量更加冗余以及更容易出错。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

冗余和冗长的意思不同,请考虑一下

Suggested change
- 它比对象字面量更加冗余以及更容易出错
- 它比对象字面量更加冗长以及更容易出错

</tr>
</tbody>
</table>
与 `Object.setPrototypeOf` 相比,将 `__proto__` 设置为非对象的值(译者注:`null` 不会被忽略)只会被忽略,而非抛出异常。它也只有稍微好一点的浏览器支持。然而,它是非标准的,并且已废弃。你应该几乎总是使用 `Object.setPrototypeOf` 作为代替。
Copy link
Member

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` 的部分内容,使得更改被应用到所有现有的实例中。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(这一段)感觉可不作修改

@yin1999
Copy link
Member

yin1999 commented Nov 4, 2024

关于“属性 x”还是“x 属性”没有做调整(我个人偏好一致性)

我的意思是,你给出的翻译是存在不一致的问题的(你的翻译有“属性 x”,也有“x 属性”)

我觉得我应该为之前的回应表达一下歉意。我觉得我应该是带着解决方案和你沟通。不用纠结过去是什么样子的,而是想法子让未来更好。

的确不用纠结过去是什么样的,只是我希望减少一些“可能是无太多必要的修改”,因为修改意味着额外的检查(因为修改不能确保一定正确)。要考虑一点,当贡献者翻译完一篇文档后,审查人员几乎需要付出同等的时间来对内容进行审查。但是活跃的贡献者数量目前是多于活跃的审查人员的。

我更希望的是,比如我们看到一句话的翻译可能会让人误解,或者使用的辞藻不够完善优美(引人注意),那么我们在有更好的想法时可以对其进行修改。

@familyboat
Copy link
Contributor Author

我很能理解你的心情。我现在感知到的是:我能敏锐的注意到存在错误的地方以及需要改善的地方。
但是,对于某些语句的翻译,我也很难说可以调整到更好的状态(根据我们这几次“关于某些调整是否有必要的对话”得出来的结论。但我的内心更倾向能继续调整,并且是向好的方向调整,可现实情况是我的能力还不够)。
所以,我现在也相当于是遇到了一个瓶颈期。我也正在寻求一些外部帮助,希望能提高一下语言组织能力。明天我会抽时间把整篇文章再仔细地过一遍。
如果你能提供这个方面的帮助,我也是非常感激。

familyboat and others added 3 commits November 5, 2024 21:57
…/index.md

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@familyboat
Copy link
Contributor Author

对你之前提到的所有评论意见做了相应的调整。我认可的地方是调整回原有的翻译(例如,“x 属性”还是“属性 x”,我遵循的就是英文表述的顺序);我存在不同意见的地方,也给出了相应的回应。也请你考虑一下我的想法。

@familyboat familyboat requested a review from yin1999 November 5, 2024 16:16
@yin1999
Copy link
Member

yin1999 commented Nov 9, 2024

还有上面提到过的问题没有得到解决(其他没问题了):#24216 (comment)

@familyboat
Copy link
Contributor Author

还有上面提到过的问题没有得到解决(其他没问题了):#24216 (comment)

已处理。

Copy link
Member

@yin1999 yin1999 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @familyboat

@yin1999 yin1999 merged commit ae76d18 into mdn:main Nov 10, 2024
7 checks passed
@familyboat familyboat deleted the local_Inheritance_and_the_prototype_chain branch November 10, 2024 09:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
l10n-zh Issues related to Chinese content.
Projects
Development

Successfully merging this pull request may close these issues.

2 participants