JS中的prototype

转载

其实所有的OO语言都有这一机制。即多个实例如何共享方法。

JS中的每个instance都有一个属性proto指向prototype,而方法都定义在prototype中,通过这种机制实现方法共享。例如:

            function Person(name){
                this.name=name;
            }

            Person.prototype.printName=function(){
                alert(this.name);
            }

            var person1=new Person('Byron');
            var person2=new Person('Frank');
1)如果希望每个实例单独拥有的方法则定义到this 中:    

          function Obj(){
                this.a=[]; //实例变量
                this.fn=function(){ //实例方法

                }
            }

            console.log(typeof Obj.a); //undefined
            console.log(typeof Obj.fn); //undefined

            var o=new Obj();
            console.log(typeof o.a); //object
            console.log(typeof o.fn); //function
2) 静态变量,函数

当定义一个函数后通过 “.”为其添加的属性和函数,通过对象本身仍然可以访问得到,但是其实例却访问不到,这样的变量和函数分别被称为静态变量和静态函数。

            function Obj(){
            }
            Obj.a=0; //静态变量
            Obj.fn=function(){ //静态函数   
            }

            console.log(Obj.a); //0
            console.log(typeof Obj.fn); //function

            var o=new Obj();
            console.log(o.a); //undefined
            console.log(typeof o.fn); //undefined
3)私有变量,函数

         在函数内定义的变量和函数如果不对外提供接口,那么外部将无法访问到。

           function Obj(){
                var a=0; //私有变量
                var fn=function(){ //私有函数

                }
            }

            var o=new Obj();
            console.log(o.a); //undefined
            console.log(o.fn); //undefined


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值