Javascript学习笔记的对象文本(2):原型对象
Javascript是唯一被广泛用作原型继承的语言,因此理解两种继承方式之间的差异需要时间。第一个主要区别是Javascript使用原型链继承:
函数(){
this.value = 42;
}
foo.prototype = { {
方法:(函数){ }
};
函数(bar){ }
将bar的原型设置为:
bar.prototype =新foo();
bar.prototype.foo =你好世界;
确保bar的构造函数本身就是一个新的bar对象实例。
bar.prototype.constructor =吧;
VaR测试=新的酒吧();
现在让我们看看整个原型链的组成:
测试{ { }的实例
Bar.prototype { } Foo的实例
{ foo:你好世界}
foo.prototype
{方法:…}
object.prototype
{说明:} / * * /等…
在上面的例子中,对象测试将继承Bar.prototype和foo.prototype同时。所以它可以访问定义foo,函数的方法。当然,它也可以访问属性值。值得一提的是,当新的酒吧()不创建新的Foo的实例,它利用它原型对象Foo实例。以同样的方式,所有的酒吧实例共享相同的值的属性。我们举例说明:
test1 =新的酒吧();
test2 =新的酒吧();
bar.prototype.value = 41;
test1.value / / 41
test2。价值 / / 41
原型链查找机制
访问一个对象的属性时,Javascript开始遍历整个原型链从对象本身,直到相应的属性被发现。如果这个时候到达原型链的顶端,这是在上面的例子中object.prototype,仍然需要找到属性没有被发现,那么Javascript将返回未定义。
原型对象的属性
虽然Javascript的原型对象的属性是用来构建原型链的,但是我们仍然可以将它赋给原型的值,但是原始值拷贝对于原型是无效的,例如:
函数(富){ }
foo.prototype = 1; / /无影响
本文介绍了题外话在这里,原来的价值是什么:
在Javascript中,变量可以分别存储两种类型的值:原始值和引用值。
1。原始值(原始值):
原始值是一个固定的简单值,一个简单的数据段存储在堆栈堆栈中,也就是说,它们的值直接存储在变量访问的位置。
原始类型有以下五种类型:未定义的、空的、布尔的、数字的、字符串的。
2。参考值(参考值):
引用值是一个较大的对象,它存储在堆堆中。也就是说,存储在变量中的值是一个指针指针,指向存储对象的内存位置。
原型链的性能
如果需要查找的属性位于原型链的顶部,查找过程无疑会对性能产生负面影响,这将是需要严格执行性能的场景中的一个关键因素。此外,在查找非现有属性时,将遍历整个原型链。
类似地,当遍历对象的属性时,原型链上的所有属性都将被访问。
总结
理解原型继承是更复杂的Javascript代码的前提,同时注意代码中的原型链的高度。当面临的性能瓶颈,学会把原型链分开。此外,有必要区分原型对象原型的原型__proto__。这里我们主要讨论对象的原型样机,并没有详细说明原型__proto__问题。