原型
- 原型是声明
在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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。