web.js.创建对象

对象的组成
方法——函数:动态,过程:
属性——变量:状态,静态:

变量:自由,不属于任何东西:
属性:属于一个对象

函数,变量属于某个对象时就成为方法,属性(其实本质还是一样,环境不同名字不同而已)看下面一段代码

            var arr=[1,2,3];//变量
            arr.a=12;//属性
            show=function (){//函数
                alert(this);
            }
            arr.yinshuo=function (){//方法
                alert(this);
            }
            show();//window
            arr.yinshuo();//1,2,3

看下面一段代码,创建了一个自己的对象

  <script type="text/javascript">
  function creatpeo(name,qq){//构造函数,
    var obj=new Object();//创建对象
        obj.name=name;
        obj.qq=qq;//name qq 为属性
        obj.myname=function(){
        alert('我的名字:'+this.name)
        }
        obj.myqq=function(){
        alert('我的QQ:'+this.qq);
        }   //以上两个为方法
        return obj;
  } 
    var obj1=creatpeo('尹烁','12315');//调用
    var obj2=creatpeo('尹航','110');
        obj1.myname();//尹烁
        obj1.myqq();    //12315
        alert(obj1.myname)//他们俩弹出都是obj.myname=function(){
        alert(obj2.myname)//alert('我的名字:'+this.name)
                                            //}
        alert(obj1.myname==obj2.myname)//但答案却是false,想想这样会引发什么样的坏处
  </script>

咱们 一步步解决上面的问题 ,首先通常咱们调用一个类前 要加new,
比如 var arr=new Array(),在这里 new有什么用呢,先看修改后的代码

 function creatpeo(name,qq){//构造函数,
    //加了new后 系统偷偷为你做了类似 var this=new Object()
        this.name=name;
        this.qq=qq;
        this.myname=function(){
        alert('我的名字:'+this.name)
        }
        this.myqq=function(){
        alert('我的QQ:'+this.qq);
        }   
        //系统偷偷为你 return this    ;   
  } 
    var  en= new creatpeo('尹烁','12315');
         en.myname();
         en.myqq();
        </script>

代码得到简化,咱看下一个问题,alert(obj1.myname==obj2.myname)
答案为false
在上面我已经做了实验,obj1.myname与obj2.myname弹出的东西完全相等,但却系统却认为不一样,这就造成了空间大量浪费(因为每调用一次,就要多拿出一部分空间来储存它),怎么解决呢,看下面

            function creatpoeple(name,qq){
                this.name=name;
                this.qq=qq;
            }
            creatpoeple.prototype.Sname=function(){
                alert('我的名字:'+this.name);
            }
            creatpoeple.prototype.Sqq=function(){
                alert('我的名字:'+this.qq);
            }
        var obj1= new creatpoeple('尹烁','12315')
        var obj2= new creatpoeple('尹航','110')       
            obj1.Sname();
            obj1.Sqq();
            alert(obj1.Sname==obj2.Sname);//ture

这里我们用到了prototype(原型),什么是原型呢,看一段简单的代码

var arr1=new Array(12,55,34);
var arr2=new Array(12,33, 1);

arr1.sum=function ()                
{
    var result=0;

    for(var i=0;i<this.length;i++)
    {
        result+=this[i];
    }

    return result;
};

alert(arr1.sum());
alert(arr2.sum());

思考下,alert(arr2.sum());能弹出来吗,有什么方法才能弹出来呢,
就是再加一个arr2的方法即

arr2.sum=function ()                
{
    var result=0;

    for(var i=0;i<this.length;i++)
    {
        result+=this[i];
    }

    return result;
};

是不是感觉特别麻烦,在看看prototype(原型)如何解决这个问题

var arr1=new Array(12,55,34);
var arr2=new Array(12,33, 1);

Array.prototype.sum=function () 

{
    var result=0;

    for(var i=0;i<this.length;i++)
    {
        result+=this[i];
    }

    return result;
};

alert(arr1.sum());
alert(arr2.sum());  

依我来看,原型就是把本质相同一些东西集合到一起,Array.prototype是一个集合[arr1,arr2],当你调用arr1.sum(),Array.prototype.sum=function (),也就可以理解为arr1.sum=function (),接着上面的代码

    function creatpoeple(name,qq){//构造函数
                this.name=name;
                this.qq=qq;
            }
            creatpoeple.prototype.Sname=function(){//方法
                alert('我的名字:'+this.name);
            }
            creatpoeple.prototype.Sqq=function(){//方法
                alert('我的名字:'+this.qq);
            }
        var obj1= new creatpoeple('尹烁','12315')
        var obj2= new creatpoeple('尹航','110')       
            obj1.Sname();
            obj1.Sqq();
            alert(obj1.Sname==obj2.Sname);//ture

依据上面所说,你是不是可以对这段代码进行分析呢,同样很惊喜的看到,我们最后得到的是true
1.咱们先对前面没说的进行解释
构造函数 : 加属性 不同的(name,qq不同的特征)
原型 : 加方法 相同的(让不同的对象(arr1,arr2)使用相同的方法)

继续努力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值