js中对象与继承

1创建自定义对象的四种方法:

 

Var obj=new Object();

Var obj2={};

Function Emp(){}

Var obj3=new Emp();

Varobj4=Object.create(ptoto)

2基于原型的对象创建和继承

任何一个js对象都有一个原型对象,即他的父对象,所有原型对象的最终父对象都是Object.prototype.toString=function(){

                   Return‘[object Object]’;

}

在ECMAScript5中属性的分类

l  数据属性(Data Property)

l  访问器属性(Accessor Property 可读可写)

var square2={

                  //数据属性

                  width:10,

                  //访问器属性:自己不用存储数据根据其他属性算出来的

                  get   perimeter()

                  {

                            returnthis.width*4;        

                  },

                  set   perimeter(num){

                            console.log("parameterset访问器被调用了")

                  }

                  get   size(){

                            returnthis.width*this.width;

                  }

                  set   size(size)

                  {

                            this.width=Math.sqrt(size);

                  }

}

调用方式:

console.log(square2.size)//调用的get访问器

square2.size=10000;//调用的set访问器

l  访问器属性本质是两个函数,若想读取访问器属性的值,会自动调用get访问器:

l  若想为访问器属性赋值,会自动调用set访问器,并把等号右边的值传递给set访问器的形参。

l  访问器属性自己是不能存储值的,所以访问器属性值往往要依赖于另一个数据属性。

l  访问器属性一般用于两个场合:用于冗余属性和有意控制属性的只读或只写。

2ECMAScript中新添内容:属性的特性

属性:对象中可以保存数据的变量,

属性的特性:

1.        数据属性特性:value,writable,enumerable,configurable

 

var stu={

         chinese:90

}

stu.math=80;

//添加一个新的数据属性

Object.defineProperty(

         stu,

         'english',

         {/*属性描述符对象*/

                   value:99,

                   writable:false,//是否可写

                   enumrable:true,//是不是可以用for..in来遍历

                   confirgurable:true//是否可以配置

         }

);

 

console.log(stu.english)

stu.english=100;

//遍历,枚举对象的每个属性

for(var p in stu){

         console.log(p+'=>'+stu[p]);

}

2.        访问器属性的特性:get,set,enumerable,configurable

var stu={

         chinese:90

}

stu.math=80;

//添加一个新的数据属性

Object.defineProperty(

         stu,

         'english',

         {/*属性描述符对象*/

                   value:99,

                   writable:false,//是否可写

                   enumrable:true,//是不是可以用for..in来遍历

                   confirgurable:true//是否可以配置

         }

);

 

console.log(stu.english)

stu.english=100;

//遍历,枚举对象的每个属性

for(var p in stu){

         console.log(p+'=>'+stu[p]);

}

//使用属性的特性定义一个新的访问器属性

Object.defineProperty(

         stu,

         'total',

         {

                   get:function(){

                            returnthis.chinese+this.math+this.english;

                   },

                   set:function(){

                  

                   },

                   enumerable:true,

                   configurable:true

         }

);

 

例子:

1采用面向对象的方式裁剪掉一个字符串的前后空格

var s1=new String(' A B')

String.prototype.ltrim =function(){

     var reg=/^\s*/;

          varresult=this.repalce(reg,"")

          return result;

}

 

2采用面向对象的方式为所有的时间对象添加一个格式化函数

var d1=new Date();

//参数中可以包含几个特殊的字符如yy-MM-ddHH:mm:ss

Date.prototype.format=function(fmt)

{

         var result="";

         var year=this.getFullYear();

         var month=this.getMonth()+1;

         var day=this.getDate();

         var hour=this.getHours();

         var minuts=this.getMinutes();

         var second=this.getSeconds();

 

         result=fmt.replace("yyyy",year);

         result=result.replace("MM",month);

         result=result.replace("dd",day);

         result=result.replace("HH",hour);

         result=result.replace("mm",minuts);

         result=result.replace("ss",second);

         return result;

}

 

Javascript中值类型:

值类型

特殊类型

引用类型

1原生对象--ECMAScript

2宿主对象由浏览器提供的对象浏览器兼容性问题—W3c

3自定义对象

 

一:创建对象

//js实现继承 创建对象的方式一:原型方法创建对象。

var fol =new Object();

fol.name='飞行物';

fol.speed =0;

fol.fly=function(){

 

}

stop=function(){

 

}

 

var plane=new Object();

plane.capacity = 200;

plane.load = function(){

 

}

//修改飞机对象的原型,也就是父对象实现继承

Object.setPrototypeOf(plane,fol)

//这样飞机就具有了父对象的所有属性

console.log(plane.name)

console.log(plane.speed)

console.log(plane.capacity)

plane.fly()

plane.land()

plane.load()

 

//当飞机觉得父类的某个对象属性不好使的时候

//进行覆盖

plane.name='空客A230'

plane.speed=1500;

 

创建对象的方式二:直接量的方式创建

 

var fol ={

         fol.name='飞行物';

         fol.speed=0;

         fly:function(){}

         stop:function(){}

}

var plane={

         capacity:200;

         load:function(){}

}

//修改飞机对象的原型,也就是父对象实现继承

Object.setPrototypeOf(plane,fol)

//这样飞机就具有了父对象的所有属性

console.log(plane.name)

console.log(plane.speed)

console.log(plane.capacity)

plane.fly()

plane.land()

plane.load()

 

//当飞机觉得父类的某个对象属性不好使的时候

//进行覆盖

plane.name='空客A230'

plane.speed=1500;

创建对象方式三:莫把对象方式

var fol =function(name,speed){

         this.name='飞行物';

         this.speed=0;

         this.fly=function(){}//建议把函数放在外面

         this.stop=function(){}

}

var plane= function(capacity){

         this.capacity=200;

         this.load=function(){}

}

//修改飞机对象的原型,也就是父对象实现继承

Object.setPrototypeOf(plane,fol)

//这样飞机就具有了父对象的所有属性

console.log(plane.name)

console.log(plane.speed)

console.log(plane.capacity)

plane.fly()

plane.land()

plane.load()

继承的第一种方式

var fol =function(name,speed){

         this.name='飞行物';

         this.speed=0;

         this.fly=function(){}//建议把函数放在外面

         this.stop=function(){}

}

var plane= function(capacity){

         this.capacity=200;

         this.load=function(){}

}

//修改飞机对象的原型,也就是父对象实现继承

Object.setPrototypeOf(plane,fol)

//这样飞机就具有了父对象的所有属性

console.log(plane.name)

console.log(plane.speed)

console.log(plane.capacity)

plane.fly()

plane.land()

plane.load()

继承的第二种方式:

/当飞机觉得父类的某个对象属性不好使的时候

//进行覆盖

plane.name='空客A230'

plane.speed=1500;

 

var fol =function(name,speed){

         this.name='飞行物';

         this.speed=0;

         this.fly=function(){}//建议把函数放在外面

         this.stop=function(){}

}

var plane= function(capacity){

         this.capacity=200;

         this.load=function(){}

}

plane.prototype=new fol ('飞行物',0)

继承的第三种方式:

var fol=Object.create(

   this.name="",

         this.speed=0,

         this.fly:function(){},

         this.stop:function(){}

)

//创建飞机继承自飞行物

var plane =Object.create(fol)

plane.capacity=200;

plane.load=function(){}

第四种 模版方式

var fol=function(){

   this.name="",

         this.speed=0,

         this.fly=function(){},

         this.stop=function(){}

)

//创建飞机继承自飞行物

function Plane(name,speed,capacity){

        

         Object.setPrototypeOf(this,newFlyingObject(this,fol))

         this.capacity=capacity;

         this.load=function(){}      

}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值