JS面向对象1(基本规则)

来源:互联网 发布:法院网络拍卖规定 编辑:程序博客网 时间:2024/06/05 20:19

一,JS中的变量和方法类型

1) 

      Code:
    function Obj(){
                var a=0; //私有变量
                var fn=function(){ //私有函数
                    
                }
            }
      var o=new Obj();
      console.log(o.a); //undefined
            console.log(o.fn); //undefined

直接定义的属性或者方法属于类的私有成员变量

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

使用 functionname.xx定义的方法或属性时类静态成员

3)

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

使用this.XX定义的类似于公有成员方法

4)

           function Person(name){

                this.name=name;

            }

           

           Person.prototype.share=[];

           

           Person.prototype.printName=function(){

                alert(this.name);

            }

           

            var person1=new Person('Byron');

            var person2=new Person('Frank');

           

           person1.share.push(1);

           person2.share.push(2);

           console.log(person2.share); //[1,2]

使用prototype定义的是类的原型方法

3和4的主要区别:

function Obj(){
                this.a=[]; //实例变量
                this.fn=function(){ //实例方法
                    
                }
            }
            
            var o1=new Obj();
            o1.a.push(1);
            o1.fn={};
            console.log(o1.a); //[1]
            console.log(typeof o1.fn); //object
            var o2=new Obj();
            console.log(o2.a); //[]
            console.log(typeof o2.fn); //function

o1中修改了a和fn,而在o2中没有改变,由于数组和函数都是对象,是引用类型,这就说明o1中的属性和方法与o2中的属性与方法虽然同名但却不是一个引用,而是对Obj对象定义的属性和方法的一个复制。

Prototype关键字 prototype是方法中的一个对象,prototype中的所有方法和属性会被所有对象共享,是js实现继承的一种方式。



0 0
原创粉丝点击