作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题需要更多 focused .它目前不接受答案。
想改进这个问题?更新问题,使其仅关注一个问题 editing this post .
8年前关闭。
Improve this question
由于对原型(prototype)继承的了解较少,我陷入困境。我想知道原型(prototype)继承到底是什么以及它是如何实现的。
你能举一个简单的例子吗?
任何帮助表示赞赏。
最佳答案
在其核心
想象一下,您有一个对象,并且想要查找一个属性。现在想象该属性不存在。如果您可以让它自动继续在不同对象上搜索该属性怎么办?这基本上就是原型(prototype)继承。
我们该怎么做呢?
那么唯一的问题是如何在对象之间建立这种关系。嗯,这就是奇怪的部分。
我将从主要的历史方式开始。那就是使用函数。
首先要注意的是,JavaScript 中的函数本身就是一个对象。它可以有自己的属性,并且它使用原型(prototype)继承来访问其他属性。
所以让我们从创建一个函数开始。
function Foo() {
// our function
}
Foo
的函数.我们的新函数会自动获取一个名为
prototype
的属性。当它被创建时。该属性引用了一个(几乎)空对象。
console.log(typeof Foo.prototype); // object
Foo.prototype
object 是我们在寻找对象的新属性时将用作“备份”对象的对象。但是我们还没有在我们想要使用的对象和
Foo.prototype
之间形成任何特殊的关系。目的。
new
调用该函数。运算符(operator)。
var my_object = new Foo();
my_object
是一个新的空对象。但它的“原型(prototype)链”中有悬垂在我们的
Foo
上的对象。功能关闭其
.prototype
属性(property)。换句话说,当我们在
my_object
上查找属性时,如果该属性不存在,它将继续搜索
Foo.prototype
目的。
Foo.prototype
有用的东西。 .但实际上该对象有一个属性。当我们创建
Foo
时,该属性也会自动创建。函数,它是
.constructor
属性(property)。
Foo
功能。换一种说法:
Foo.prototype.constructor === Foo; // true
my_object
是空的,如果在
my_object
上寻找房产时不存在的,它会继续搜索
Foo.prototype
对象,那么这应该意味着我们应该能够自动到达
Foo.prototype.constructor
来自
my_object
的属性(property).
my_object.constructor === Foo; // true
my_object
没有名为
constructor
的属性,它继续搜索它所继承的对象,即
Foo.prototype
,我们知道,它有一个
.constructor
引用
Foo
的属性功能。
Foo.prototype
.这将使我们的
my_object
如果对象不直接拥有它们,则查找这些属性。
// give a custom property to `Foo.prototype`
Foo.prototype.bar = "foobar";
// see if we can access that property on your object
my_object.bar === "foobar"; // true
Foo
创建一个新对象也可以访问
.bar
属性(property)。
var another_object = new Foo();
another_object.bar === "foobar"; // true
Foo
创建的所有对象使用
new
关键字将在其原型(prototype)链中包含
Foo.prototype
目的。换句话说,
Foo.prototype
由
Foo
创建的所有实例共享.
Foo.prototype.bar
属性,它将反射(reflect)在我们创建的两个对象中。
Foo.prototype.bar = "raboof";
my_object.bar === "raboof"; // true
another_object.bar === "raboof"; // true
Foo
上的奇怪对象。功能...
Foo.prototype
.
关于javascript - 如何在js中使用原型(prototype)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17344574/
我是一名优秀的程序员,十分优秀!