您的位置:首页 > Web前端 > JavaScript

Js 对象 实例 以及构造函数的练习

2012-05-08 21:40 453 查看
myObj.js:

/*function f1(){//Code}

var f1=function(){//Code}

var myFunction=new Function('f1','code')*/
//以上三种创建函数的方法相同

var myObj=new Object();
//ar myObj={};  //等于上行代码  实例化的myObj不能再通过new来建新的实例
myObj.name='sidihu';//对象实例myObj添加静态属性
myObj.age='26';
//对象实例myObj添加静态方法
myObj.showName=function(){
alert(this.name);
}

myObj.showAge=function(){
alert(this.age);
}

myObj.showSomething=function(){
alert('showSonething');
}

//function
var myFun1=function(message){
alert(message);
this.message=message;

}

var myFun=function(){};
//myFun既是一个实例 也是一个构造函数
//直接用对象加点添加给对象的属性或者方法  本对象可以直接使用  但是myFun新的实例无法使用
// 但是使用了prototype添加公有的属性或者方法myFun无法使用 但是myFun的新实例能够使用 y因为向prototype中添加的成员会把新方法添加到myFun的底层定义中  而不是添加到myFun实例自身
//使用了prototype新建的方法中有不是用prototype创建的属性或者方法 myFun的新实例访问也会出错 例如myFun的新实例使用showAge()  因为showAge()中的age是不对外开放的
myFun.name='sidihu';
myFun.age='26';

myFun.showName=function(){
alert(this.name);
}

myFun.prototype.showAge=function(){
alert(this.age);
}

myFun.prototype.showSomething=function(){
alert('showSonething');
}

//私有变量
var myPrivate=function(message){
this.message=message;
//私有属性和私有方法是存在于构造函数作用域中的自包含的对象 新实例无法访问
//私有属性
var separate="-";
var myOwner=this;
//私有方法
function alertMessage(){
alert("message is "+separate+myOwner.message);
}

//实例化时执行
//alertMessage();

//特权方法(也是公有方法)
//getPrivate可以访问构造函数中的私有属性 并且
this.getPrivate=function(){
alert("getPrivate:message is "+separate+myOwner.message);
}
}

//新实例可以使用
myPrivate.prototype.showMessage=function(){
alert(this.message);
}

myPrivate.prototype.showSeparate=function(){
alert(this.showSeparate);
}


页面js:

<script language="javascript" src="js/MyObject.js" type="text/javascript" ></script>
<script language="javascript" type="text/javascript" >

window.onload=function(){
//myObj.name='ok'; //重新修改name属性
//myObj.showName();//直接使用myObj对象操作自己的属性和方法

//将myObj对象赋值给myObj2后使用myObj2
/*var myObj2= myObj;
myObj2.showName=function(){ alert('i from myobj2 '+this.name);}//myObj2修改了myObj的showName方法
myObj2.showAge();//26
myObj.age='30';
alert(myObj2.age)//修改age属性的之后显示30
alert(myObj.age)//30 myObj2修改了myObj的age属性
myObj2.showName();//显示 i from myobj2 sidihu*/

//var fromMyFun1=new myFun1("i am fun1");//myFun1被实例化后 myFun1中方法会直接执行 而且此时myFun1中的this指向fromMyFun1, fromMyFun1有了meaage属性
//alert(fromMyFun1.message);

/*//直接使用myFun
myFun.showName();
//myFun.showAge();//报错  因为showAge是使用了prototype添加的方法

var fromFun=new myFun();
fromFun.showAge();//不报错 因为fromMyfun是myFun的新实例*/

var fromPrivate=new myPrivate('message');
fromPrivate.showMessage();//不报错
fromPrivate.getPrivate();

}

</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: