zoukankan      html  css  js  c++  java
  • javascript-js 的prototype原型理解讲解

    起初接触到这个prototype我是拒绝的,我还是花了一部分时间来理解这个东西,算不上精通,有什么问题回复在下面

    毕竟我是板砖挨惯了(滑稽);

    在我理解看来,prototype不外乎就两个基础的作用:
    1.动态的添加类的属性和方法
    2.复制原类的内容

    我们先来看第一个:
    首先来定义一个简单的Person类;

    var Person = function(name,age){
    //指定该类的属性为参数值
    this.name = name;
    this.age = age;
    //为该类指定一个talk方法
    this.talk = function(){
    alert("talk");
    };
    };

    下面我们来生成Person 的实例

    var zhangsan = new Person("zhangsan",19);
    var lisi = new Person("lisi",19);
    1
    2
    这样我们产生了两个Person 的实例,zhangsan 和lisi ,原先Person里有个方法talk,而我们生成实例的时候,该talk会被再次生成一遍,因此这是极其不好的,因为假如我们要产生100个Person 的实例,该talk()就会被创建100次,而这很有可能导致内存溢出。那有没有办法只创建一次talk()呢,答案是有的!就是用prototype!

    先来看一段代码:

    //照样是定义一个Person的类
    var Person = function(name,age){
    //指定该类的属性为参数值
    this.name = name;
    this.age = age;
    //我们这里不再为Person设定talk方法
    };
    };

    再次来生成Person 的实例

    var zhangsan = new Person("zhangsan",19);
    var lisi = new Person("lisi",19);

    这里创建完毕后,我们得知,zhangsan和lisi都没有talk的方法,我们现在用prototype给他们加上

    Person.prototype.talk = function(){
    alert("talk");
    };

    此时,Person所有的实例都拥有了这个方法

    zhangsan.talk();//"talk"
    lisi,talk();//"talk"

    既然第一种用处搞清楚了,现在来看第二种用处。
    所谓第二种用处就是复制原类的内容。

    //新建一个类Person2
    var Person2 = function(name,age){};
    Person2.prototype = new Person();

    此时的Person里的内容已经全部拷贝到Person2里面了

  • 相关阅读:
    get和post
    java学习day34-Cookie技术
    java学习day33-Maven-相关
    在Linux设置完共享文件夹后无法显示Windows里的文件
    Tomcat-把tomcat的端口号从8080修改为80
    是否忘记向源中添加“#include“StdAfx.h””
    php-fpm配置文件详解
    Web安全常见漏洞修复建议
    blog个性化设置
    使用 notepad++ 编辑器在行首、行尾添加字符
  • 原文地址:https://www.cnblogs.com/exclusiveMemory/p/8440715.html
Copyright © 2011-2022 走看看