1

原型

  • 原型是声明

在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={}


李通
15 声望5 粉丝