-
Notifications
You must be signed in to change notification settings - Fork 0
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
JS原型链与继承相关 #7
Comments
this 根本不受原型的影响无论在哪里找到方法:在对象或者原型中。调用方法时,this 始终是点之前的对象。 因此,实际上 setter 使用 admin 作为 this,而不是 user。 这是一件非常重要的事情,因为我们可能有一个有很多方法而且继承它的大对象。然后我们可以在继承的对象上运行它的方法,它们将修改这些对象的状态,而不是大对象的。 例如,这里的 animal 代表“方法存储”,而且 rabbit 在使用它。 调用 rabbit.sleep(),在 rabbit 对象上设置 this.isSleeping:
|
每个函数都有 "prototype" 属性,即使我们不设置它。 默认的 "prototype" 是一个只有属性 constructor 的对象,它指向函数本身。 像这样:
|
JavaScript 本身并不能确保正确的 "constructor" 函数值是的,它存在于函数的默认 "prototype" 中,但仅此而已。之后会发生什么 —— 完全取决于我们自己。 特别是,如果我们将整个默认原型替换掉,那么其中就不会有构造函数。 例如:
因此,为了确保正确的 "constructor",我们可以选择添加/删除属性到默认 "prototype" 而不是将其整个覆盖:
或者,也可以手动重新创建 constructor 属性:
// 这样的 constructor 也是正确的,因为我们手动添加了它 |
所有 delete 操作都直接应用于对象。这里 delete rabbit.eats 试图从 rabbit 中删除 eats 属性,但 rabbit 对象并没有 eats 属性。所以这个操作不会有任何 副作用。 |
let user2 = new Object('Pete') |
No description provided.
The text was updated successfully, but these errors were encountered: