prototype的入门基础

来源:互联网 发布:windows ntp客户端配置 编辑:程序博客网 时间:2024/06/07 20:24

私有变量和函数

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

var objs=new obj();

console.log(objs.a);--------undefined      

objs.fn()---------undefined

因为 他们是局部变量即使实例化它也不能访问内部的私有变量和方法。


当我们定义一个函数通过.来添加属性和方法时,我们可以访问,但是他的实例却不可以

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

如果我们想通过面向对象的方法来定义属性和方法,然后通过实例化访问。

function Obj(){                this.a=[]; //实例变量                this.fn=function(){ //实例方法                    console.log("1");                }            }                        console.log(typeof Obj.a); //undefined            console.log(typeof Obj.fn); //undefined                        var o=new Obj();            console.log(o.a); //[]            o.fn(); //1

但是在上述的例子中添加

var o1=new obj(); // 再次实例化那个obj

o1.fn=function(){console.log("222")} 从写他的方法。

o.fn()和o1.fn()都是从写fn这个函数。但是得到的结果却是不一样的。如果我们实例化很多这个函数那就得写很多属性和方法到function obj()里面。可能就导致代码冗余。


这是我们就想到了prototype。。。这个属性是任何函数都有的。我们可以在它里面定义很多的属性和方法添加到原有的那个对象里面,不需要在开始的时候定义写很多空的属性和方法了


function Person(){                            }
我们可以看出它自带了prototype的属性了。


我们只需要为

function Person(name){                this.name=name;            }                        Person.prototype.printName=function(){                alert(this.name);            }                        var person1=new Person('Byron');----Byron            var person2=new Person('Frank');-----Frank
当我们想要找到某个对象的某个属性的时候会先在哪个对象里面找,找不到再到原型prototype里面找。而prototype还有自己的prototype,一直往里面找,直到找到为止。
function Person(name){                this.name=name;            }                        Person.prototype.share=[];            var person=new Person('Byron');            person.share=0;                        console.log(person.share); //0而不是prototype中的[]