Javascript关闭和数据可见性

前端之家收集整理的这篇文章主要介绍了Javascript关闭和数据可见性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图围绕类,数据可见性和闭包(特别是 Javascript)的想法,我在jQuery文档页面上提供了类型,它提到关闭用于隐藏数据:

The pattern allows you to create objects with methods that operate on data that isn’t visible to the outside—the very basis of object-oriented programming.

例子:

function create() {
  var counter = 0;
  return {
    increment: function() {
      counter++;
    },print: function() {
      console.log(counter);
    }
  }
}
var c = create();
c.increment();
c.print(); // 1

通过使用关键字var声明变量计数器,它已经在函数/类定义内部进行局部作用域.据我所知,可以说,从外面无法开始.我从数据可见性的角度看错了.

第二,如上所述编写课程有以下优点:

function create() {
  var counter = 0;
  this.increment = function() {
      counter++;
  }
  this.print = function() {
      console.log(counter);
  }
  return this;
}
var c = create();
c.increment();
c.print(); // 1

据了解,这些或多或少在语义上是相同的 – 第一个是更多的“jQuery风格”.我只是想知道是否有优势或其他细微差别,我从第一个例子中不能完全理解.如果我是正确的,这两个例子都会创建闭包,因为他们正在访问在自己的范围之外声明的数据.

http://docs.jquery.com/Types#Closures

解决方法

首先,两个版本使用闭包都是正确的.

第一个版本是更清洁(在我看来),更流行的现代javascript.第一种风格的主要潜在缺点是,您无法有效地将对象分配给构造函数的原型,如果您正在创建大量相同的对象,这是有用的(而且更有效).

第二种风格,我其实从来没有见过生产Javascript.通常,您将使用new实例化create,而不是在create()函数中返回此值,如下所示:

function create() {
  var counter = 0;
  this.increment = function() {
      counter++;
  }
  this.print = function() {
      console.log(counter);
  }
}
var c = new create();
c.increment();
c.print(); // 1
原文链接:https://www.f2er.com/js/155511.html

猜你在找的JavaScript相关文章