1创建自定义对象的四种方法:
l Var obj=new Object();
l Var obj2={};
l Function Emp(){}
l Var obj3=new Emp();
l 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("parameter的set访问器被调用了")
}
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中值类型:
l 值类型
l 特殊类型
l 引用类型
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(){}
}