数码资讯
Javascript中的原型和继承细节(图形文本)
请忘记你以前学过的所有面向对象的知识。它只需要考虑汽车的情况。是的,是汽车。 最近我看了24个小时的勒芒,这是一个流行的法国事件。最快的汽车被称为勒芒原型。这些汽车是由奥迪或标致制造商生产的,但它们不是你在街上或高速路上看到的那种车。它们是专为高速耐力项目设计的。 厂家投入巨额资金开发、设计、制造这
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
请忘记你以前学过的所有面向对象的知识。它只需要考虑汽车的情况。是的,是汽车。
最近我看了24个小时的勒芒,这是一个流行的法国事件。最快的汽车被称为勒芒原型。这些汽车是由奥迪或标致制造商生产的,但它们不是你在街上或高速路上看到的那种车。它们是专为高速耐力项目设计的。
厂家投入巨额资金开发、设计、制造这些原型,和工程师们总是想得到项目的极端。他们已经进行了各种实验合金、生物燃料、制动技术、复合组件和轮胎的安全性能。随着时间的推移,一些在这些实验技术得到了多次再到汽车的主流产品线的一些技巧,你可能在第一次出现的原型。
你也可以说,这些主流车辆从车上继承了技术样机。
现在,我们要讨论在Javascript原型和继承问题的基础,它不是像经典的遗传模式,你知道在C++,java或C,#,但也很强大,会更灵活。
相关对象和类
Javascript是所有对象,指的是传统意义上的对象,即包含状态和行为的单个实体,例如,Javascript中的数组包含几个值,包含推送、反转和POP方法的对象。
VaR MyArray = { 1, 2 };
MyArray.push(3);
MyArray.reverse();
MyArray.pop();
VaR的长度= myarray.length;
现在的问题是,推送方法从何而来我们之前提到的使用类的语法来定义对象的结构的静态语言,但Javascript是一种语言没有类的语法,它不能定义每个对象数组与数组类的语法,因为Javascript是一种动态的语言,我们可以将任意对象上的方法时,实际上是需要的。例如,下面的代码,在二维空间中,定义了一个指向对象来表示一个点,并定义了一种添加方法。
var点{ { {
X:10,
y:5,
问题补充:功能(多个角度){
这个X = X多个角度;
这个Y Y多个角度;
}
};
但上面的方法不是很好扩展,我们需要确保每个点对象都包含一个添加方法。同时,我们希望所有点对象共享相同的添加实现,而不是手动添加每个点对象,这就是原型扮演它的角色。
相关的原型
在Javascript中,每个对象保持隐藏状态对另一个对象的引用,也被称为原型。我们先前创建的参考原型对象的数组,和同样是真正的点对象创建的原型参考。以上,是隐藏的,但也是ECMAscript(Javascript实现的正式名称)可以通过一个对象的__proto__属性进行访问,如谷歌浏览器,这个原型参考。从概念上讲,我们可以把对象作为原型,类似于图1中所示的对象的关系。
图1
展望未来,开发人员将能够使用object.getprototypeof函数代替的__proto__属性来得到对象的原型参考。当这篇文章写的是,你可以在谷歌浏览器,使用object.getprototypeof功能Firefox、IE9浏览器,浏览器会在未来,因为它已经是ECMAscript标准的一部分。我们可以使用下面的代码来证明MyArray点我们建立的对象是不同的两个原型对象。
Object.getPrototypeOf(点)!= object.getprototypeof(MyArray);
在本文的其余部分,我将用__proto__和object.getprototypeof功能交互,主要是因为__proto__容易在图和句子识别。它记住它重要(__proto__)不是一个标准,那object.getprototypeof功能是看这个对象的原型的推荐方法。
是什么让原型如此特别
我们还没有回答这个问题:阵列中的推力来自哪里答案是:它来自MyArray原型对象。图2是一个屏幕截图在Chrome浏览器的脚本调试程序。我们所谓的object.getprototypeof方法查看的MyArray原型对象。
图2
注意,在MyArray原型对象的方法很多,包括推,流行,和反向的方法,在代码示例调用。因此,原型对象是否包括推法,但如何MyArray方法并参考吗
MyArray.push(3);
理解其工作原理的第一步是认识到原型不是特别的,原型只是一个普通的对象,你可以在原型中添加方法和属性,并像其他Javascript对象一样对待它们,但是我们应该把乔治奥威尔的猪理论应用到动物养殖场中。所有的物体都应该相等,但有些物体比其他物体更平等。
在Javascript中的原型对象很特别,因为他们遵循的规则。当我们告诉Javascript,我们要调用一个对象的推送方法,或阅读对象的x属性,运行时会首先查找对象本身。如果你不能找到你想要在运行时,它将跟随__proto__参考对象原型找到成员。我们称MyArray推法时,Javascript没有找到MyArray对象推送方法,但发现它对MyArray原型对象,所以Javascript调用这个方法(见图3)。
图3
上面描述的行为意味着对象本身继承了原型上的任何方法或属性,事实上,Javascript不需要使用类语法来继承,就像一个继承了赛车原型的相应技术的汽车一样,Javascript对象也可以继承原型对象的功能特性。
图3还显示,每个数组对象也可以保持自己的状态和成员在同一时间。当请求MyArray的长度属性,Javascript会长度属性的值在数组MyArray代替原型中读取相应的价值。我们可以重写推法加入推到对象。这将有效隐藏推方法实现原型。
共享原型
Javascript中原型设计的真正魔力在于多个对象如何维护对同一原型对象的引用:
VaR MyArray = { 1, 2 };
无功yourarray = { 4, 5, 6 };
然后这两个数组将共享相同的原型对象,下面的代码结果是真的:
Object.getPrototypeOf(MyArray)= object.getprototypeof(yourarray);
如果我们引用两个数组对象的推送方法,Javascript将发现原型上共享的推送方法。
图4
在Javascript中的原型对象提供了传承功能,还实现了该方法的实现共享。原型也是一个链型。换句话说,因为原型对象只有一个对象,一个原型对象可以维持到另一个原型对象的引用。如果你再看看图2,你可以看到原型的__proto__属性是一个非空的值指向另一个原型。当Javascript看起来像一件如推,它检查每个对象的原型参考链直至达到会员或达到原型链结束。原型链中开辟了一个灵活的方式来继承和大家分享。
您可能要问的下一个问题是:如何设置这些自定义对象的原型引用如何将加法方法添加到原型对象中,并继承多个点对象的方法,例如,前面使用的点对象在回答这个问题之前,我们需要先看看这个函数。
相关的功能
在Javascript函数也是一个对象。这样的声明带来了几个重要的结果,我们不在本文中所有涉及事项。其中,指定一个函数一个变量和一个函数作为参数传递给另一个函数构成现代Javascript编程的基本范式的表达能力。
我们需要注意的是函数本身是对象,所以函数可以有自己的方法、属性和引用原型对象。
这将返回true:
Typeof(阵)=功能
此表达式是:
Object.getPrototypeOf(阵)= object.getprototypeof(function(){ })
这些表达方式为:
array.prototype!= null
在第一行代码证明了Javascript数组功能。稍后我们将看到如何调用数组函数创建一个新数组对象。下一行代码证明数组对象使用相同的原型与任何其他函数对象,我们可以看到,同样的原型是在数组对象共享。最后一行代码显示,所有数组函数原型属性,与原型属性指向有效的对象。这个原型属性是非常重要的。
在Javascript中每个函数对象都有一个原型属性。不要混淆这一原型属性的__proto__属性。他们不是用同样的方式,他们也不是指向同一个对象。
返回true
Object.getPrototypeOf(阵)!= array.prototype
阵列。__proto__提供阵列的原型-请使用它从数组函数继承的对象。
和array.protoype,它提供了一个对所有阵列原型对象。也就是说,它提供了一个原型对象数组对象像MyArray,并含有方法的所有阵列将继承,我们可以写一些代码来证明这一事实。
/真
array.prototype = object.getprototypeof(MyArray)
是否为真
array.prototype = object.getprototypeof(yourarray);
我们也可以使用这个新的知识,导致以前的示意图。
图5
根据您所知道的,想象创建一个新对象并将新对象显示为数组的过程。
创建一个新的空对象
var;
继承相同的原型、对象数组
o.__proto__ = Array.prototype;
现在我们可以调用数组的任何方法…
O.push(3);
虽然这个代码是有趣的和可以工作,问题是,并不是每一个Javascript环境支持的书面__proto__对象属性。幸运的是,Javascript也有一个内置的标准机制来创建对象。它只需一人操作来创建新的对象,并设置新对象的__proto__参考,这是新的运营商。
新数组();
O.push(3);
在Javascript中新的运营商有三个基本任务:第一,它创造了新的空对象。接下来,它将设置新对象的__proto__属性匹配所调用函数的原型性质。最后,操作符调用功能,通过新的对象作为一个参考。如果你想扩展代码最后两行,它将成为继:
var;
o.__proto__ = Array.prototype;
array.call(O);
O.push(3);
函数的调用方法允许在函数调用时指定函数中引用的对象。当然,函数的作者需要在这种情况下实现这样的函数。
构造函数
构造函数与普通函数相同,但它具有以下两个特殊属性。
通常构造函数的首字母是大写(使识别构造函数更容易)。
构造函数通常与新操作符相结合来构造新对象。
数组是一个构造函数的一个例子。数组函数需要使用new操作符,和数组的首字母是uppercase.javascript包括阵列作为一个内置的功能,和任何人都可以写自己的构造函数。事实上,我们终于可以写一点东西是以前创建的构造函数。
var =函数(x,y){
这个;
这个,y = y;
this.add =功能(多个角度){
这个X = X多个角度;
这个Y Y多个角度;
}
}
新的点(3, 4);
新的点(8, 6);
p1.add(P2);
在上面的代码中,我们使用新的操作符和点函数来构造点对象,它有x属性和y属性和一个加法方法。你可以想象最终的结果如图6所示。
图6
现在的问题是,我们仍然有一个单独的添加方法,在我们的每一个点对象。使用原型和继承的知识我们知道,我们宁愿转移添加方法的点对象从每个点实例point.prototype.to实现继承的添加方法的效果,我们需要做的是修改point.prototype对象。
var =函数(x,y){
这个;
这个,y = y;
}
point.prototype.add =功能(多个角度){
这个X = X多个角度;
这个Y Y多个角度;
}
新的点(3, 4);
新的点(8, 6);
p1.add(P2);
巨大的成功!我们刚刚在Javascript完成了原型继承模式!
图7
总结
我希望这篇文章能帮助你揭开Javascript原型概念的神秘面纱。你开始看到的就是原型允许对象从其他对象继承的功能,然后看看如何将新的运营商和构造函数来生成对象。什么是这里所说的仅仅是打开对象的原型力量和灵活性的第一步。这篇文章鼓励自己去发现新的信息,了解原型和Javascript语言。
同时,请小心驾驶,你永远不知道路上的车辆会从它们的原型继承到什么样的(有缺陷的)技术。
原文链接:剧本翻译:伯乐在线- aimujie瘾君子
最近我看了24个小时的勒芒,这是一个流行的法国事件。最快的汽车被称为勒芒原型。这些汽车是由奥迪或标致制造商生产的,但它们不是你在街上或高速路上看到的那种车。它们是专为高速耐力项目设计的。
厂家投入巨额资金开发、设计、制造这些原型,和工程师们总是想得到项目的极端。他们已经进行了各种实验合金、生物燃料、制动技术、复合组件和轮胎的安全性能。随着时间的推移,一些在这些实验技术得到了多次再到汽车的主流产品线的一些技巧,你可能在第一次出现的原型。
你也可以说,这些主流车辆从车上继承了技术样机。
现在,我们要讨论在Javascript原型和继承问题的基础,它不是像经典的遗传模式,你知道在C++,java或C,#,但也很强大,会更灵活。
相关对象和类
Javascript是所有对象,指的是传统意义上的对象,即包含状态和行为的单个实体,例如,Javascript中的数组包含几个值,包含推送、反转和POP方法的对象。
VaR MyArray = { 1, 2 };
MyArray.push(3);
MyArray.reverse();
MyArray.pop();
VaR的长度= myarray.length;
现在的问题是,推送方法从何而来我们之前提到的使用类的语法来定义对象的结构的静态语言,但Javascript是一种语言没有类的语法,它不能定义每个对象数组与数组类的语法,因为Javascript是一种动态的语言,我们可以将任意对象上的方法时,实际上是需要的。例如,下面的代码,在二维空间中,定义了一个指向对象来表示一个点,并定义了一种添加方法。
var点{ { {
X:10,
y:5,
问题补充:功能(多个角度){
这个X = X多个角度;
这个Y Y多个角度;
}
};
但上面的方法不是很好扩展,我们需要确保每个点对象都包含一个添加方法。同时,我们希望所有点对象共享相同的添加实现,而不是手动添加每个点对象,这就是原型扮演它的角色。
相关的原型
在Javascript中,每个对象保持隐藏状态对另一个对象的引用,也被称为原型。我们先前创建的参考原型对象的数组,和同样是真正的点对象创建的原型参考。以上,是隐藏的,但也是ECMAscript(Javascript实现的正式名称)可以通过一个对象的__proto__属性进行访问,如谷歌浏览器,这个原型参考。从概念上讲,我们可以把对象作为原型,类似于图1中所示的对象的关系。
图1
展望未来,开发人员将能够使用object.getprototypeof函数代替的__proto__属性来得到对象的原型参考。当这篇文章写的是,你可以在谷歌浏览器,使用object.getprototypeof功能Firefox、IE9浏览器,浏览器会在未来,因为它已经是ECMAscript标准的一部分。我们可以使用下面的代码来证明MyArray点我们建立的对象是不同的两个原型对象。
Object.getPrototypeOf(点)!= object.getprototypeof(MyArray);
在本文的其余部分,我将用__proto__和object.getprototypeof功能交互,主要是因为__proto__容易在图和句子识别。它记住它重要(__proto__)不是一个标准,那object.getprototypeof功能是看这个对象的原型的推荐方法。
是什么让原型如此特别
我们还没有回答这个问题:阵列中的推力来自哪里答案是:它来自MyArray原型对象。图2是一个屏幕截图在Chrome浏览器的脚本调试程序。我们所谓的object.getprototypeof方法查看的MyArray原型对象。
图2
注意,在MyArray原型对象的方法很多,包括推,流行,和反向的方法,在代码示例调用。因此,原型对象是否包括推法,但如何MyArray方法并参考吗
MyArray.push(3);
理解其工作原理的第一步是认识到原型不是特别的,原型只是一个普通的对象,你可以在原型中添加方法和属性,并像其他Javascript对象一样对待它们,但是我们应该把乔治奥威尔的猪理论应用到动物养殖场中。所有的物体都应该相等,但有些物体比其他物体更平等。
在Javascript中的原型对象很特别,因为他们遵循的规则。当我们告诉Javascript,我们要调用一个对象的推送方法,或阅读对象的x属性,运行时会首先查找对象本身。如果你不能找到你想要在运行时,它将跟随__proto__参考对象原型找到成员。我们称MyArray推法时,Javascript没有找到MyArray对象推送方法,但发现它对MyArray原型对象,所以Javascript调用这个方法(见图3)。
图3
上面描述的行为意味着对象本身继承了原型上的任何方法或属性,事实上,Javascript不需要使用类语法来继承,就像一个继承了赛车原型的相应技术的汽车一样,Javascript对象也可以继承原型对象的功能特性。
图3还显示,每个数组对象也可以保持自己的状态和成员在同一时间。当请求MyArray的长度属性,Javascript会长度属性的值在数组MyArray代替原型中读取相应的价值。我们可以重写推法加入推到对象。这将有效隐藏推方法实现原型。
共享原型
Javascript中原型设计的真正魔力在于多个对象如何维护对同一原型对象的引用:
VaR MyArray = { 1, 2 };
无功yourarray = { 4, 5, 6 };
然后这两个数组将共享相同的原型对象,下面的代码结果是真的:
Object.getPrototypeOf(MyArray)= object.getprototypeof(yourarray);
如果我们引用两个数组对象的推送方法,Javascript将发现原型上共享的推送方法。
图4
在Javascript中的原型对象提供了传承功能,还实现了该方法的实现共享。原型也是一个链型。换句话说,因为原型对象只有一个对象,一个原型对象可以维持到另一个原型对象的引用。如果你再看看图2,你可以看到原型的__proto__属性是一个非空的值指向另一个原型。当Javascript看起来像一件如推,它检查每个对象的原型参考链直至达到会员或达到原型链结束。原型链中开辟了一个灵活的方式来继承和大家分享。
您可能要问的下一个问题是:如何设置这些自定义对象的原型引用如何将加法方法添加到原型对象中,并继承多个点对象的方法,例如,前面使用的点对象在回答这个问题之前,我们需要先看看这个函数。
相关的功能
在Javascript函数也是一个对象。这样的声明带来了几个重要的结果,我们不在本文中所有涉及事项。其中,指定一个函数一个变量和一个函数作为参数传递给另一个函数构成现代Javascript编程的基本范式的表达能力。
我们需要注意的是函数本身是对象,所以函数可以有自己的方法、属性和引用原型对象。
这将返回true:
Typeof(阵)=功能
此表达式是:
Object.getPrototypeOf(阵)= object.getprototypeof(function(){ })
这些表达方式为:
array.prototype!= null
在第一行代码证明了Javascript数组功能。稍后我们将看到如何调用数组函数创建一个新数组对象。下一行代码证明数组对象使用相同的原型与任何其他函数对象,我们可以看到,同样的原型是在数组对象共享。最后一行代码显示,所有数组函数原型属性,与原型属性指向有效的对象。这个原型属性是非常重要的。
在Javascript中每个函数对象都有一个原型属性。不要混淆这一原型属性的__proto__属性。他们不是用同样的方式,他们也不是指向同一个对象。
返回true
Object.getPrototypeOf(阵)!= array.prototype
阵列。__proto__提供阵列的原型-请使用它从数组函数继承的对象。
和array.protoype,它提供了一个对所有阵列原型对象。也就是说,它提供了一个原型对象数组对象像MyArray,并含有方法的所有阵列将继承,我们可以写一些代码来证明这一事实。
/真
array.prototype = object.getprototypeof(MyArray)
是否为真
array.prototype = object.getprototypeof(yourarray);
我们也可以使用这个新的知识,导致以前的示意图。
图5
根据您所知道的,想象创建一个新对象并将新对象显示为数组的过程。
创建一个新的空对象
var;
继承相同的原型、对象数组
o.__proto__ = Array.prototype;
现在我们可以调用数组的任何方法…
O.push(3);
虽然这个代码是有趣的和可以工作,问题是,并不是每一个Javascript环境支持的书面__proto__对象属性。幸运的是,Javascript也有一个内置的标准机制来创建对象。它只需一人操作来创建新的对象,并设置新对象的__proto__参考,这是新的运营商。
新数组();
O.push(3);
在Javascript中新的运营商有三个基本任务:第一,它创造了新的空对象。接下来,它将设置新对象的__proto__属性匹配所调用函数的原型性质。最后,操作符调用功能,通过新的对象作为一个参考。如果你想扩展代码最后两行,它将成为继:
var;
o.__proto__ = Array.prototype;
array.call(O);
O.push(3);
函数的调用方法允许在函数调用时指定函数中引用的对象。当然,函数的作者需要在这种情况下实现这样的函数。
构造函数
构造函数与普通函数相同,但它具有以下两个特殊属性。
通常构造函数的首字母是大写(使识别构造函数更容易)。
构造函数通常与新操作符相结合来构造新对象。
数组是一个构造函数的一个例子。数组函数需要使用new操作符,和数组的首字母是uppercase.javascript包括阵列作为一个内置的功能,和任何人都可以写自己的构造函数。事实上,我们终于可以写一点东西是以前创建的构造函数。
var =函数(x,y){
这个;
这个,y = y;
this.add =功能(多个角度){
这个X = X多个角度;
这个Y Y多个角度;
}
}
新的点(3, 4);
新的点(8, 6);
p1.add(P2);
在上面的代码中,我们使用新的操作符和点函数来构造点对象,它有x属性和y属性和一个加法方法。你可以想象最终的结果如图6所示。
图6
现在的问题是,我们仍然有一个单独的添加方法,在我们的每一个点对象。使用原型和继承的知识我们知道,我们宁愿转移添加方法的点对象从每个点实例point.prototype.to实现继承的添加方法的效果,我们需要做的是修改point.prototype对象。
var =函数(x,y){
这个;
这个,y = y;
}
point.prototype.add =功能(多个角度){
这个X = X多个角度;
这个Y Y多个角度;
}
新的点(3, 4);
新的点(8, 6);
p1.add(P2);
巨大的成功!我们刚刚在Javascript完成了原型继承模式!
图7
总结
我希望这篇文章能帮助你揭开Javascript原型概念的神秘面纱。你开始看到的就是原型允许对象从其他对象继承的功能,然后看看如何将新的运营商和构造函数来生成对象。什么是这里所说的仅仅是打开对象的原型力量和灵活性的第一步。这篇文章鼓励自己去发现新的信息,了解原型和Javascript语言。
同时,请小心驾驶,你永远不知道路上的车辆会从它们的原型继承到什么样的(有缺陷的)技术。
原文链接:剧本翻译:伯乐在线- aimujie瘾君子
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。