关于javascript中Prototype的理解

一直都不理解javascript中的prototype是什么意思,自从看了dolphinx的博客(http://www.cnblogs.com/dolphinX/p/3286177.html)才对它有了大体的认识。

每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型对象上继承属性和方法。

在javascript中创建对象有多种方法

1.直接创建一个对象的实例,并添加3个属性。

var obj =new Object();
obj.name="test";
obj.sex="male";
obj.age=50;

2.利用function定义对象的模板

关于javascript中Prototype的理解
function person(name,sex,age){
  this.name=name;
  this.sex=sex;
  this.age=age;
     
}
//这时你就可以创建实例
var person=new person("test","male","50");
关于javascript中Prototype的理解

 在函数中定义的属性和方法如果不对外提供接口的话,那么外部将无法访问到。

关于javascript中Prototype的理解
function Obj(){
                var a=0; //私有变量
                var fn=function(){ //私有函数
                    
                }
            }
var o=new Obj();
            console.log(o.a); //undefined
            console.log(o.fn); //undefined
关于javascript中Prototype的理解

这时就需要定义实例方法和实例变量了

关于javascript中Prototype的理解
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
关于javascript中Prototype的理解

但你每new一个新的对象,虽然调用同名方法但引用的对象去不是同一个,这时就需要prototype了

关于javascript中Prototype的理解
Blog.prototype.jumpurl = ‘‘;
Blog.prototype.jump = function(){
window.location = this.jumpurl;
};
/*
*等同于
Blog.prototype = {
jumpurl : ‘‘,
jump : function(){
window.location = this.jumpurl;
}
};
*/var test = new Blog(‘server‘, ‘test‘); 
关于javascript中Prototype的理解

Blog的实例test中包含了jump属性,同时自动生成一个__proto__属性,该属性指向Blog的prototype,可以访问到prototype内定义的jumpurl方法,这时属性和方法就是共享的了。

关于javascript中Prototype的理解,布布扣,bubuko.com

关于javascript中Prototype的理解

上一篇:linux多线程编程(转)


下一篇:python 读取邮件