JavaScript面向对象

面向对象的几个概念

在进入正题前,先了解传统的面向对象编程(例如Java)中常会涉及到的概念,大致可以包括:

  • 类:定义对象的特征。它是对象的属性和方法的模板定义。
  • 对象(或称实例):类的一个实例。
  • 属性:对象的特征,比如颜色、尺寸等。
  • 方法:对象的行为,比如行走、说话等。
  • 构造函数:对象初始化的瞬间被调用的方法。
  • 继承:子类可以继承父类的特征。例如,猫继承了动物的一般特性。
  • 封装:一种把数据和相关的方法绑定在一起使用的方法。
  • 抽象:结合复杂的继承、方法、属性的对象能够模拟现实的模型。
  • 多态:不同的类可以定义相同的方法或属性。

面向对象的三个基本特征是封装、继承、多态,接下来我们就来讲讲JavaScript的中怎么实现这三个基本特征。

react-redux学习笔记

为什么要用react-redux?

我们知道 React 的核心思想是 构建组件, 然后各个组件维护自己的状态(state)和UI,当状态变化时,自动重新渲染整个组件。

可以看出 React 实现的是 MVC 中的 V 层,而React对组件间数据流的管理是比较弱的,父子组件之间数据传递还比较简单,子组件可以通过 this.props 访问到父组件的数据/方法,而非父子组件之间的通信一般是通过一个全局事件来进行监听,如果组件非常多的话,这对数据流的管理是非常不方便的。

跨域之法(四)—— document.domain+iframe

前提 主域相同而子域不同

这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域
Javascript出于对安全性的考虑,而禁止两个或者多个不同域的页面进行互相操作。相同域的页面在相互操作的时候不会有任何问题。

跨域之法(三)—— window.name

主要思想

通过在应用页面设置一个iframe,其源头指向拥有数据的文件或页面,让那个data(数据页面)把值赋在那个iframe的window.name上,然后由于window.name在浏览器环境中是一个全局/window对象的属性,且当在 frame 中加载新页面时,name 的属性值依旧保持不变。通过在 iframe 中加载一个资源,该目标页面将设置 frame 的 name 属性。此 name 属性值可被获取到,以访问 Web 服务发送的信息。但 name 属性仅对相同域名的 frame 可访问。这意味着为了访问 name 属性,当远程 Web 服务页面被加载后,必须导航 frame 回到原始域。(就是说先用data把数据放在iframe的window.name里面,然后切换到proxy ,这时proxy拿到window.name的数据,就可以向同域的app传值了)同源策略依旧防止其他 frame 访问 name 属性。一旦 name 属性获得,销毁 frame 。

跨域之法(一)——初探跨域

什么是跨域?

  所谓跨域, 就是当前域到了另外的域,域不仅仅指的是不同的域名网站,可能同一个域名不同的端口号也算不同的域。浏览器是有规则的,只要协议、域名、端口有任何一个不同,都被当作是不同的域。协议指的是http,或者https等。