JavaScript第九天笔记(原型)

原型

概述

在JavaScript中,函数是一个包括属性和要领的Function范例的对象。而原型(Prototype)就是Function范例对象的一个属性。
在函数定义时九包括了prototype属性,他的初始值是一个空对象。在JavaScript中并没有定义函数的原始范例,所以原型可所以任何范例。
原型是用于保留对象的同享属性和要领的,原型的属性和要领并不会影响函数自身的属性和放大。

猎取原型

1.经由过程组织函数的prototype属性

function fn(){
    console.log('this is function');
}
console.log(fn.prototype);

2.经由过程Object对象的getgetPrototypeOf()要领

function fn(){
    console.log('this is function');
}
console.log(Object.getPrototypeOf(fn));

为原型新增属性或要领

  1. 组织函数.prototype.属性名 = 属性值
    组织函数.prototype.要领名 = function(){}
  2. 组织函数.prototype = {
    属性名:属性值,
    要领:function(){}

}

组织函数的原型

/*定义组织函数*/
function Fun(){
    this.name = 'segment';
    this.sayMe = function(){
        console.log('this is function');
    }
}
//操纵组织函数Fun的原型
Fun.prototype.age = 18;
// 应用组织函数来建立对象
var fun = new Fun();
console.log(fun);
// 为组织函数的原型新增的属性 -> 组织函数建立的对象中照旧能够接见
console.log(fun.age);// 18
// 对象fun中不存在age属性
var result = Object.getOwnPropertyDescriptor(fun, 'age');
console.log(result);

自有属性和原型属性

自有属性:组织函数自身的属性
原型属性:经由过程原型所定义的属性

function Mingzi (name){
      this .name = name;
      this .sayMe = function(){
      console .log('this is function')
      }
}
Mingzi.prototype.age = 18;
var mingzi = new Hero('石原');

console.log(mingzi.name);// 石原
console.log(mingzi.age);// 18

var mingzi2 = new Mingzi('长泽雅吗');
console.log(mingzi2.name);// 长泽雅美
console.log(mingzi2.age);// 18
Hero.prototype.age = 80;

console.log(mingzi.age);
console.log(mingzi2.age);

重写属性

经由过程组织函数或对象的自有属性能够重写原型的属性
自有属性与原型属性同名时,默许接见的是自有属性

// 定义组织函数
function Hero(){
    this.name = '张无忌';
}
// 组织函数的原型
Hero.prototype.name = '周芷若';
// 组织函数建立对象
var hero = new Hero();
console.log(hero.name);// 张无忌

// 删除对象的属性
delete hero.name;
// 从新接见对象的属性
console.log(hero.name);// 周芷若

检测原型的属性

Object.hasOwnProperty(prop)要领
作用 – 推断当前指定属性是不是为自有属性
参数1.prop – 示意指定属性称号

2.返回值 - 布尔值
  true - 示意存在指定的自有属性
  false - 示意不存在指定的自有属性

运用in关键字检测对象的属性
作用 – 推断对象中是不是存在指定属性(自有属性或原型属性)
返回值 – 布尔值

 true - 示意存在指定的属性
 false - 示意不存在指定的属性

显现原型与隐式原型

每一个函数function都有一个prototype,即显式原型
每一个实例对象都有一个__proto__,可称为隐式原型
对象的隐式原型的值为其对应组织函数的显式原型的值
函数的prototype属性: 在定义函数时自动增加的, 默许值是一个空Object对象
对象的__proto__属性: 建立对象时自动增加的, 默许值为组织函数的prototype属性值
我们能直接操纵显式原型, 但不能直接操纵隐式原型

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