Javascript原型对象总是纠缠。即使是经验丰富的Javascript专家甚至他们的作者往往把这一概念的有限的解释。我相信问题来自我们的原型最早的理解。原型总是新的,构造
函数紧密相连,和混乱的原型
属性。事实上,原型是一个相当简单的概念为了更好的了解它,我们需要忘记我们已经学到的结构原型,然后。
什么是原型
原型是从其他对象继承属性的对象。
它是不是可以成为原型的对象
对.
这些物体有原型吗
每个对象都有一个
默认原型。原型本身就是对象,每个原型本身都有一个原型。(只有一个例外,默认对象原型位于每个原型链的顶部,而其他原型则位于原型链后面)。
后退一步,
目标是什么
在Javascript中,对象是由键值对
保存的任意任意一组信息。如果不是原班(undefined,null,boolean.nuber或字符串),它是一个对象。
您可以假设每个对象都有一个原型。但是当我写(原型,{),但我没有定义,你疯了吗
忘记对原型属性的理解——这可能是混淆的根源。一个对象的真正原型是内部{原型}属性。ECMA 5标准访问
方法的
介绍,Object.getPrototypeOf(对象)。这个新的实施已经被Firefox、Safari
支持Chrome和IE9。此外,除了IE,所有的
浏览器都支持标准的存取方法__proto__,否则我们只能说对象构造方法的原型属性。
var = { };
失败,在Opera或ie = 8
Object.getPrototypeOf(一); / / {物}
IE失败
a.__proto__; / / {物}
所有浏览器
(如果constructor.prototype有/没有更换和失败的对象。
创建)
a.constructor.prototype; / / {物}
好的,虚假的原始
类型,为什么是
错误的。__proto__返回值
当访问原型原型(原型)时,它被强制为对象。
(由于双负)在IE < 8 = 中
工作)
假。__proto__ =布尔(假)。__proto__; / /真的
我想用这个原型来实现继承,我现在该怎么办
向实例添加示例属性几乎毫无意义。除非有一个案例,直接将属性添加到实例本身是非常有效的。假设我们有一个对象来共享现有对象的函数。例如,数组,我们可以这样做。
在IE < = 8中失败
var = { };
a.__proto_ = Array.prototype;
a.length; / / 0
但我们可以看到,原型的实力是多个实例共享相同的原型,原型对象的属性,可以只定义一次,所有实例的引用继承。效果使用样机的
性能和
程序的可
维护性是显而易见的。所以,对于构造函数创建的
原因吗是的,构造函数提供了一个方便的跨浏览器机制来实现实例创建的公共原型分配。
在给出的一个例子,我需要知道什么constructor.prototype财产做
首先,Javascript不区分构造函数和其他方法,所以每个方法都有一个原型属性,而不是任何方法,没有这样的属性。
方法,构造函数不总是,在任何
情况下
都是原型属性。
math.max.prototype; / / {物}
还有一个原型属性构造函数
var =函数(名称){
this.name =名称;
}
a.prototype; / / {物}
数学不是一种方法,因此没有原型属性。
math.prototype; / /空
现在可以定义,方法的原型属性是当方法作为构造函数创建实例时被赋给实例原型的对象。
理解该方法的原型属性与实际原型没有任何关系,这一点非常重要。
(伊江将失败)
var =函数(名称){
this.name =名称;
}
a.prototype = a.__proto__; / /假
a.__proto__ = = function.prototype; / /真实原型原型属性的构造函数
你能举出例证吗
下面的代码,也许您已经看到或使用过一百次,但它已经在这里移动,但可能有点新。
构造函数。作为一个新的对象,并将它返回到原型}属性中,它将被
设置为原型属性的默认构造函数。
var圆=函数(半径){
this.radius =半径;
下一行是隐式添加的,仅用于插图。
/ /本。__proto__ = circle.prototype;
}
通过对原型对象的每个实例的属性进行新的
扩展来扩展圆/缺省原型对象
circle.prototype.area =函数(){
返回数学。π*,* this.radius半径;
}
这两个示例创建循环,每个人都将使用相同的原型属性。
var =新圆(3),b =新圆(4);
A.area(),ToFixed(2); / / 28.27
B.area(),ToFixed(2); / / 50.27
太好了。如果我改变了构造函数的原型属性,那么现有的实例对象能够立即访问新的原型版本吗
六羟甲基三聚氰胺六甲醚...不完全是。如果
修改现存的样机的性能,真的是这样,因为a.__proto__指对象定义的a.prototype当对象被创建。
var =函数(名称){
this.name =名称;
}
创建一个新的('alpha);
a.name; / / 'alpha
A.prototype。x = 23;
内; / / 23
但如果我和一个新的对象代替原型属性,a.__proto__仍然指向原来的对象。
var =函数(名称){
this.name =名称;
}
创建一个新的('alpha);
a.name; / / 'alpha
a.prototype = { x:23 };
内; / /空
默认原型是什么样的
具有构造函数属性的对象。
Var(a =函数){ };
a.prototype.constructor = a; / /真的
var =新的a();
a.constructor = a; / /真实(构造函数的特性由其原型继承)
什么是必须做的原型
如果一个原型属性出现在一个原型链,表达的是一种将返回真。这意味着我们可以欺骗是让它失败。
Var(a =函数){ }
var =新的a();
a.__proto__ = = a.prototype; / /真的是一个很会返回true
一个是一个; / /真的;
使用原型
a.__proto__ = function.prototype;
的原型不再是原型属性中的同一原型链。
一个是一个; / /假
那么我还能用这个原型做什么呢
记得我曾经说过,每个构造函数都有一个原型属性,可以用来将原型分配给构造函数生成的所有实例。事实上,这也适用于
本地构造函数,比如函数和字符串,通过扩展(而不是
替换)这个属性,我们可以更新每个指定类型对象的原型。
string.prototype.times =函数(计数){
返回计数< 1:新数组(计数+ 1);
}
你好!时间(3);您好!你好!你好!;
请……时间(6);请…拜托...拜托...拜托...请……
告诉我更多关于继承和原型的工作。典型的东方连锁店是什么
由于每个对象和每个原型(本身)都有一个原型,所以我们可以想象一个对象一个接一个地
连接在一起形成一个原型链,原型链的终端总是缺省对象(对象)的原型。
a.__proto__ = B;
b.__proto__ = C;
c.__proto__ = {}; / /默认对象
{ }。__proto__。__proto__; / /空
原型继承机制是隐式和隐式地实现的,当对象要访问属性富时,Javascript遍历A的原型链(首先从一个自身),
检查原型链的每个链接中的富属性,如果找到富属性,它将返回它,否则将返回未定义的值。
直接作业是什么样的
当对象的属性是直接分配的,原型继承机制不能发挥。a.foo = 'bar'is直接分配到A的foo属性指定一个值到一个原型对象的属性,你需要直接找到原型对象的属性。
Javascript原型就是这样,我想我对原型概念的理解还比较准确,但我的观点在任何情况下都不是最终结果,请告诉我我不同意的错误或观点。