JS笔记:原型

来源:互联网 发布:java mysql 编辑:程序博客网 时间:2024/06/08 11:17

原型VS类:

类:抽象——具体
原型:具体——具体

对象——原型对象

设置对象的原型:
Object.create(proto[,propertisObject])
proto 一个对象,作为新创建对象的原型
propertiesObject 对象属性的定义

var landRover={    name:'landRover',    start:function(){console.log('s% start',this.logo);    },    run:function(){console.log('s% running',this.logo);    },    stop:function(){        console.log('s% stop',this.logo );    }}//使用原型(landRover)创建新的对象var landWind=Object.create(landRover);landWind.logo="landWdind";var landCruiser =Object.create(landRover);landCruiser.logo="landCruiser";//启动landWind.start();

Object.Create
proto :指向对象的原型。隐式属性,不能直接被修改,用来说明每个对象背后都有一个原型对象。

构造函数设置对象原型
自定义对象有一个原型属性:prototype对象
使用new,new创建的对象有一个proto 属性 指向构造函数的原型属性prototype

//创建一个构造函数carfunction car(logo){    this.logo=logo||'unknown name';}//给car的原型属性创建一个对象car.prototype={    start:function(){console.log('s% start',this.logo);    },    run:function(){console.log('s% running',this.logo);    },    stop:function(){        console.log('s% stop',this.logo );    }}//创建一个新对象landRover/*分解步骤:1) 创建对象landRover2)设置landRover的_proto_3)car.apply(landRover,arguments)  (landRover作为this去执行car)*/var landRover=new Car('landRover');landRover.start();

可以创建多个对象,共享一个原型对象

//创建一个构造函数carfunction car(logo){    this.logo=logo||'unknown name';}//给car的原型属性创建一个对象car.prototype={    start:function(){console.log('s% start',this.logo);    },    run:function(){console.log('s% running',this.logo);    },    stop:function(){        console.log('s% stop',this.logo );    }}//创建构造函数landRoverfunction landRover(seriolno){    this.seriolno=seriolno;}//设置landRover的prototype属性landRover.prototype= new car('landRover')//创建landRover对象var landRover1= new landRover(100000);var landRover2= new landRover(100001)console.log(landRover1.seriolno);console.log(landRover1.toString());

原型链

对象的属性和方法优先在自身查找,没有找到,沿着原型链查找,知道找到。
只能修改自身的属性和方法,不会影响到原型链上的属性和方法。

hasOwnProperty 方法:判断属性是否是自身的属性,如果是,返回true。是Object的属性,所有对象都可以使用。

函数也是对象
LandRover 和car 可以通过new Function创建的
原型链

0 0
原创粉丝点击