js原型及原型链

原型:

  • 1.首先:原型是一个对象也是一个属性
  • 2.函数才有一个prototype属性,里面放置公有的或者共有的属性和方法,原型里面的this指向实例的
  • 3.原型对象就是 Animal.prototype

constructor

  • 原型对象有一个默认属性:constructor(构造函数属性),这个属性(是一个指针)指向 prototype 属性所在的构造函数(Animal)

proto

每个对象都有proto属性用于指向创建它的构造函数的原型对象。

function Animal(name) {//Animal构造函数
    this.name = name
}


Animal.prototype.getName = function () {//Animal.prototyp原型对象
    console.log(this.name)
}
Animal.prototype.getAge = function () {//Animal.prototyp原型对象
    console.log(this.age)
}

var animal1 = new Animal('Kate')

var animal2 = new Animal('Lucy')

//animal1.proto == Animal.prototype//true

console.log(animal1.__proto__)//--->getName,getAge: ƒ,constructor: ƒ

//原型对象有一个默认属性:constructor指向 prototype 属性所在的构造函数
console.log(animal1.__proto__.constructor)//--->f Animal(name)构造函数

console.log(animal1.constructor)//--->f Animal(name)构造函数



//注意只有函数才有prototype属性
console.log(animal1.prototype)//undefinde

//animal1.__proto__ === Animal.prototype
console.log(animal1.__proto__.__proto__)//-->指向object的原型constructor: ƒ, __defineGetter__: ƒ...

console.log(Animal.prototype.__proto__)///-->指向object的原型constructor: ƒ, __defineGetter__: ƒ...

console.log(Object.prototype)-->指向object的原型constructor: ƒ, __defineGetter__: ƒ...

注意:

  • proto和constructor属性是对象所独有的
  • prototype属性是函数所独有的。但是由于JS中函数也是一种对象,所以函数也拥有proto和constructor属性
  • JS 在创建对象(普通对象、函数对象)的时候,该对象都有proto 的内置属性,用于指向创建它的构造函数的原型对象。

原型链这么查找

function Abc(){
    this.num=10;//属性
}

Abc.prototype={
    num:100,
    shownum:function(){
        return this.num;
    },
    test:function(){
        return this.num;
    }
}

Object.prototype.num=1000;

var a1=new Abc();
var a2=new Abc();

//alert(a1.num);//10--100--100先后查找顺序
//alert(a1.hehe());
//alert(a1.toString());//[object Object]

实例对象----proto------->先找构造函数的原型----proto—>object下面的原型

a1----proto------->Abc.prototype----proto—>object.prototype—>NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值