关于原型的简朴叙说

原型

  • 原型是声明

在JavaScript中, 函数时一个包括属性和要领的Function范例的对象。而原型(Prototype)就是Function范例对象的一个属性。在函数定义是就包括了protopype属性,它的失事值时一个空对像。在JavaScript中并没有定义函数的圆形范例,所以原型能够时任何范例。 原型时用于庇护对象的同享属性和要领的,原型的属性和要领并不会影响函数自身的属性和要领。
function foo (a,b){
return a+b;
}
console.log (typeof foo.prototyoe);//boject

  • 猎取原型

经由过程以下两种体式格局能够猎取对象的原型,从而设置同享的属性和要领:
经由过程组织函数的prototype属性
function person(){
console.log (‘person instantiated’);
}
console.log(person.prototype);
经由过程Object对象的getPrototypeOf(obj)要领。
function Person(){
console.log (person instantiated);
}
console.log(Object.getprototypeOf(person));

  • 原型的属性和要领

经由过程以下两种体式格局能够设置原型的属性和要领。
组织函数.Prototype.属性名+属性值;
组织函数.prototype.要领名=function(){}
直接为原型定义一个新对象。
组织函数.prototype={
属性名:属性值,
要领名:function(){}
}

  • 自在属性和原型属性

自在属性: 经由过程对象的援用增加的属性。其他对象能够无此属性:纵然有,也是相互自力的属性。
原型属性:从原型属性对象中继续来的属性,一旦原型属性中属性转变,一切继续原型属性对象属性均转变。
function Emo(ename,salary){
this.ename=ename;
this.salary=salary;
}
Emp.prototype={city:北京市,dept:研发部}
var emp1 =new Emp(’Mary’,3800);
var emp2 =new Emp(‘tmp’,3000);

  • 检测自在或原有属性

运用hasOwnPrototype()要领检测对象时否具有指定的自有属性:
function Hero(){}
var hero = new Hero()
console.log(hero.hasOwnPrototype(‘name’));
运用in关键字检测对象及其原型链中是不是具有指定的属性:
function Hero(){}
var hero=new Hero();
console.;log(‘name’in hero);

  • 扩大属性或要领

经由过程原型看为指定组织函数或对象扩大其属性或要领,以下代码实例:
function Hero (){}
Hero.protoptype={
name:’Mary’,
salary:3800}
var hero =new Hero();
console.log (hero.name);//mary

  • 重写原型属性

经由过程组织函数或对象的自在属性能够重写原型的属性, 以下代码示例:
function Hero(){}
Hero.prototype={
name:’Mary’,
salary:3800
}
var hero = new Hero();
hero.name=’tom’;
console.log(hero,name);//tom

  • 删除属性

经由过程delete关键词能够删除对象的属性,假如该对象即具有原型属性又具有既有属性的话, 先删除自在属性,在删除原型属性。以下代码示例:
function Hero(){}
Hero.prototype= {name:’Mary’,salary:3800}
var hero =new Hero();
hero.name =’Tom’;
delete hero.name;//删除Tom
console.log(hero.name);//mary
delete hero.name;//删除Mary
console.log(hero.name);//undefind

  • isprototypeOf()要领

每个对象都邑具有一个isPrototypeOf()要领,该要领用来推断一个对象是不是时另一个对象的原型。
var monkey= {}
function Human(){}
Human.prototype= monkey;
var man = new Human();
monkey.isPrototypeOf(man);//true
__proto__属性
function Hero (){}
Hero.prototype={
name:’mary’,
salay:3800
}
var hero =new Hero();
console.log(hero.name);//maey
上述代码申明hero 对象存在一个指向组织函数Hero的原型,这个链接被叫做————proto————属性只能在调式时运用。
————proto————属性时指定对象的属性。
prototype属性时指定组织函数的属性

  • 扩大内建对象

JavaScript中的内置对象有些具有prototype属性,应用内置对象prototype属性能够为内置对象扩大属性或要领。经由过程原型属性扩大内置对象的属性和要领异常天真,依据个性化请求制订JavaScript言语的具体内容。平常发起慎用这类体式格局,假如JavaScript的版本更新时能够会供应个性化属性或要领,致使争执。
Array.prototype.inArray =fuction (color){
if (this)[i]===color {return true;}
}
return false;
}
var a =[‘red’,’green’,’blue’];
console.log (a.inArray(‘red’));//true
console.log(a.inArray(‘yellow’));//false

    原文作者:李通
    原文地址: https://segmentfault.com/a/1190000016041815
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞