原型----------prototype详细解答

        function ren(name,age){
            this.name=name;
            this.age=age;
            this.fa=function(){
                alert(‘我喜欢吃‘);
            }

        }

        var p1=new ren(‘w1‘,20);
        var p2=new ren(‘w2‘,222);

        alert(p1.fa==p2.fa)      //false
        alert(p1.fa()==p2.fa()); //true
        alert(p1.name==p2.name); //false

这时候会发现

alert(p1.fa==p2.fa) 结果为falsenew一个对象,里面函数每次执行,都重新实例创建一次相同的函数fa,拖低了函数执行效率,此时我们想到的办法是不是把fa这个方法拿出来呢
function ren(name,age){
            this.name=name;
            this.age=age;
            this.fa=fa;
        }

        function fa(){
            alert(this.name);
        }
        var p1=new ren(‘w1‘,20);
        var p2=new ren(‘w2‘,222);
        p1.fa();
     p2.fa();
 

这样在外部重新定义一个fa的函数,于之前的ren函数相对接,new出两个对象,是不是调用就是同一个fa方法呢,效率是不是提高了呢

但是呢,这时候定义全局fa,是不是没有必要呢?不太合适呢。。。

这时候,能不能把这些公共方法,放在一个地方呢

伟大的prototype出现了,每一个函数都有一个prototype属性,这个属性呢,其实就是一个指针,总是指向一个对象

这个对象,用途是什么呢?---将特定的属性和方法包含在内,起到一个所有实例共享的作用

  function ren(){

        }
        var obj=ren.prototype;
        //alert(obj.constructor);
        obj.name=‘周三‘;
        obj.age=20;
        obj.fa=function(){
            alert(this.name);
        };
        var p1=new ren(‘w‘,20);
        var p2=new ren();
        alert(p1.name);
        alert(p1.fa==p2.fa); //true
        p1.fa(); alert(obj.isPrototypeOf(p1));//true

这时候我们发现p1.fa==p2.fa结果为true了,好了,ok,这时候实例化对象,得到一个方法只有一次了

下面就是原型图例了!

//构造函数, 原型对象, 实例对象三者的关系
//构造函数.prototype=原型对象
//原型对象.constructor=构造函数
alert(obj.constructor);
//实例对象.prototype=原型对象
alert(p1.prototype)

 
时间: 2024-10-08 20:50:21

原型----------prototype详细解答的相关文章

JS原型,Prototype,原型

对于javascript这样一种前端语言,个人觉得,要真正的理解其oop, 就必须要彻底搞清楚javascript的对象,原型链,作用域,闭包,以及this所引用的对象等概念.这些对弄明白了,应该就可以比较自信的驾驭这种语言了. 大家都知道,javascript中的继承不是使用的类继承的机制,而是使用的另一种方式 – 原型继承.在原型继承方式中,本质上是javascript语言加入原型链这种机制,从而实现了面向对象的重要特性之一 – 继承.在这篇博文中,基于个人的理解,来说说javascript

[js高手之路]一步步图解javascript的原型(prototype)对象,原型链

我们接着上文继续,我们通过原型方式,解决了多个实例的方法共享问题,接下来,我们就来搞清楚原型(prototype),原型链的来龙去脉. function CreateObj(uName) {             this.userName = uName;         }         CreateObj.prototype.showUserName = function(){             return this.userName;         }         va

克隆复制可使用原型( Prototype)设计模式

今天有学习设计模式的原型(Prototype)<设计模式--原型(Prototype)模式>http://www.cnblogs.com/insus/p/4152773.html .为了加强了解与认识,现再做一个练习. 创建一个原型接口: 创建一个用户控件,并实现接口: 现在网页中有一个按钮,用户点一点这个铵钮,能动态添加这个用户控件,每点击一次,克隆复制一个: 演示: 源代码下载:http://download.cnblogs.com/insus/CSharpNET/uc_prototype

原型prototype、原型链__proto__、构造器constructor

创建函数时,会有原型prototype,有原型链__proto__,有constructor.(构造函数除外,没有原型) . prototype原型:是对象的一个属性(也是对象),使你有能力向对象添加属性和方法. __proto__原型链:指向创建它的函数对象的原型对象prototype. constructor构造器:返回创建此对象的函数. 创建一个函数 这个函数的constructor返回的是js底层的函数Function,它的原型链__proto__是function.__proto__是

理解原型Prototype、继承

原型一直都是js中比较难理解的一块,那么原型究竟是什么,原型链又是什么? 原型Prototype是指当我们只要创建一个新的函数,就会根据特定的规则为这个函数创建一个prototype属性,这个属性指向函数的原型对象,原型对象通过其自身的constructor属性中的指针又指向拥有prototype属性的函数,也可以说是构造函数. 原型链是指如果让一个函数a的原型对象等于另一个类型b的实例,那么此时的a的原型对象就包含一个指向b的原型对象的指针,相应的,b的原型中包含指向构造函数b的指针,如果b的

2016年上半年网络工程师考试下午真题,参考答案,详细解答发布

2016年上半年网络工程师考试下午真题,参考答案,详细解答发布http://down.51cto.com/data/2221024

对象 原型prototype

一.对象   1. var person={          name:"kobe",//键值必须用,间隔          "age":30,          sayName:function(){              console.log("i'm"+this.name);          }     }; 可配置性:指明该属性是否可以修改.删除   可删除configurable:true/false   若 configur

数据结构:可以用求最短路径的方法思想求最长路径么?给出详细解答。。

数据结构:可以用求最短路径的方法思想求最长路径么?为什么呢? 这里求解最短路径的通用方法有Dijkstra算法和Floyd-Warshall算法,Dijkstra算法不允许边的权值为负,也不允许有回路,而Floyd-Warshall算法可以允许边的权值为负,但不允许负值边构成回路,即可以求解有回路的图 它们都有局限,这两种算法的思想可以用来求最长路径么?? 为什么 不可以? (感谢给我答案的好心人:来自于知乎:http://www.zhihu.com/question/27201255和CSDN

js之内置对象Function、Object与自定义函数间原型prototype间的关系图

注意:内置的函数对象Funtion的原型prototype是Object的实例,但却是function类型.Function.prototype instanceof Object; // true --- 是Object的实例Function.prototype instanceof Function ;// falsetypeof Function.prototype ; // "function" --- 是function类型.