zoukankan      html  css  js  c++  java
  • javascript 中 this 与 prototype 的3个区别

    区别1:

    利用 this 实现的公共方法中可以访问类的私有成员(用 var 声明的变量),私有方法(用 function 直接定义的方法); 

    利用原型扩展实现的方法中,无法调用私有成员和变量。 

    例子如下所示(把其中注释掉的两行恢复就可以看到区别): 

    function T(name) {
    this.Name = name;
    var x = 5;
       function privateFunc() {
    alert('in private method: do sometheing');
      }
      this.PublicFunc = function() {
    // 可以调用私有方法,访问私有成员变量。
      privateFunc();
      alert('x = ' + x);
    alert('in public method: do something else.');
    }
    }

      

    区别2:

    当访问对象的属性或者方法是,将按照搜索原型链prototype chain的规则进行。首先查找自身的静态属性、方法,继而查找构造上下文的可访问属性、方法,最后查找构造的原型链。 

    例子:

    function Test() { 
         this.text = function() {
              alert("defined by this");
          }  
    }  
    Test.prototype.test = function() { 
         alert("defined by prototype");  
    }  
    var _o = new Test();  
    _o.test();//输出“defined by this” 
    

      

    区别3:

    “this”与“prototype”定义的另一个不同点是属性的占用空间不同。使用“this”关键字,示例初始化时为每个实例开辟构造方法所包含的所有属性、方法所需的空间,而使用“prototype”定义,由于“prototype”实际上是指向父级的一种引用,仅仅是个数据的副本,因此在初始化及存储上都比“this”节约资源。

  • 相关阅读:
    Bit Manipulation
    218. The Skyline Problem
    Template : Two Pointers & Hash -> String process
    239. Sliding Window Maximum
    159. Longest Substring with At Most Two Distinct Characters
    3. Longest Substring Without Repeating Characters
    137. Single Number II
    142. Linked List Cycle II
    41. First Missing Positive
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/lengv10/p/3783237.html
Copyright © 2011-2022 走看看