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属性值
我们能直接操作显式原型, 但不能直接操作隐式原型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值