浅谈js原型和原型链

浅谈js原型和原型链

一.对象:普通对象 函数对象

二.构造函数特点:1.需要new实例化,内部使用this对象指向即将要生成的实例对象 2.首字母大写,用于区分普通函数

function Person(name){
    this.name=name
}
var person1=new Person('xiaohong')
var person2=new Person('lili')

person1.constructor=Person constructor指向构造函数,Person的内置属性 Person.prototype(函数对象),每个原型对象都有一个constructor属性,指向prototype属性所在的函数Person

即person1.constructor=person2.constructor=Person.prototype.constructor
通过原型实现继承

三.proto,每个对象都有这个属性指向创建他的构造函数的原型即person1.proto=Person.prototype

//var obj={}
var obj=new Object();
obj.constructor===Object
obj.__proto__===Object.prototype

person1.__proto__是Person.prototype

Person.__proto__是Person是构造函数,Function,即Function.prototype

Person.prototype._proto__是 Person.prototype是原型对象,Object,即Object.prototype

Object.__proto__是 Objext是构造行数Function 即Function.prototype

Object.prototype.__ptoto__是 Object.prototype的原型对象的__proto__指向构造函数的prototype,处于顶层是null

四。Math和Json是以对象存在的 即Math.proto===Object.prototype

五。Function.prototype是唯一一个typeof Function.prototype是function的prototype,其他构造器的prototype都是object

六。注意constructor的指向例如

function Animal(){

}
Animal.prototype.age='20'

function Cat(name,color){
    this.name = name
    this.color = color
    this.name2 = '11112222'
}
Cat.prototype = new Animal();
Cat.prototype.type="猫"
Cat.prototype.eat=function(){
    console.log('爱吃鱼')
}
function Dog(name){
    this.name=name
}
Dog.prototype = new Animal();
Dog.prototype={
    getName:function(){
        console.log('gougou')
    }
}

Cat.prototype.constructor === Animal Dog.prototype.constructor===Object 两者不相同,后者是重写Animal.prototype,前者是修改。

七。

原型和原型链是JS实现继承的一种模型。
原型链的形成是真正是靠__proto__ 而非prototype
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值