原型和继承

发布时间:2019-08-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了原型和继承脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

原型

在JS中 函数是一个包含属性和方法的Function类型的对象 原型prototype就是Function类型对象的一个属性
每个函数都有一个prototype属性, 它默认指向一个Object空对象---即:原型对象
原型对象中有一个属性constructor, 它指向函数对象
原型是用于保存对象的共享属性和方法的 原型的属性和方法并不会影响函数本身的属性和方法

 function fn(){
 return 'hello'
}
console.LOG(tyPEof fn.PRototype)   //object

获取原型

  • 通过构造函数的prototype属性
  function fn(){
   console.log('this is a function')
}
  console.log(fn.prototype);   //{constructor: ƒ}

  • 通过Object对象的getgetPrototypeOf()方法
function fn(){
console.log('this is a function')
}
console.log(Object.getPrototypeOf(fn));   //ƒ () { [native code] }

原型的属性和方法

  • 原型的属性和方法单独进行定义
  构造函数.prototype.属性名 = 属性值
  构造函数.prototype.方法名 = function(){
}
  • 直接为原型定义一个新对象
  构造函数.prototype = {
  属性名:属性值,
  方法:function(){}
}

自有属性与原型属性

自有属性:通过对象的引用添加的属性
原型属性:从原型对象中继承而来 如果原型对象中属性值改变 则所有继承
自该原型的对象属性都改变

 function Person(name){
 //构造函数本身的属性 --> 自有属性
 this.name = name;
}
//通过构造函数Person的prototype新增属性 --> 原型属性
 Person.prototype.age=29
 var man=new Person('林更新');
 console.log(man.name);  //林更新
 console.log(man.age)    //29

 var woman=new Person('宋佳');
 woman.age=38;
 console.log(woman.name) //宋佳
 console.log(woman.age)  //38
 Person.prototype.age=18;
 console.log(man.age)  //18
 console.log(woman.age)   //38

检测自有 原型属性

  • 使用hasOwnProperty()方法检测对象是否具有指定的自有属性
  function Person() {

    }
    var man =new Person()
    console.log(man.hasOwnProperty("name"))   //false
  • 使用in关键字检测对象及其原型链中是否具有指定属性
    function Person() {

    }
    var man =new Person()
    console.log("name" in man)    //false

显示原型对象和隐式原型对象

  1. 每个函数function都有一个prototype,即显式原型
  2. 每个实例对象都有一个__proto__,可称为隐式原型
  3. 对象的隐式原型的值为其对应构造函数的显式原型的值
  4. 函数的prototype属性: 在定义函数时自动添加的, 默认值是一个空Object对象
  5. 对象的__proto__属性: 创建对象时自动添加的, 默认值为构造函数的prototype属性值
  6. 我们能直接操作显式原型, 但不能直接操作隐式原型(ES6之前)
function Person() {
    this.name='MasterYi'
}
Person.prototype.age=100;
var man=new Person;
console.log(man.prototype); // undefined 表示对象中不存在该属性
console.log(man.__proto__); // {age: 100, constructor: ƒ}

原型链

  1. 访问一个对象的属性时,先在自身属性中查找,找到返回
  2. 如果没有, 再沿着__proto__这条链向上查找, 找到返回
  3. 如果最终没找到, 返回undefined
  4. __proto__这条原型查找链就是原型链: 隐式原型链
  5. 读取对象的属性值时: 会自动到原型链中查找
  6. 设置对象的属性值时: 不会查找原型链, 如果当前对象中没有此属性, 直接添加此属性并设置其值
  7. 方法一般定义在原型中, 属性一般通过构造函数定义在对象本身上

作用:用来查找对象的属性(方法)

脚本宝典总结

以上是脚本宝典为你收集整理的原型和继承全部内容,希望文章能够帮你解决原型和继承所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。