对象中包含的##

  • 分类(内置对象: 注意这些都是function;除了Function对象,实例都是object)

    • Function对象

      • Function实例function
      • 构造函数的function
    • Object对象
      • Object实例
    • 其他
      • 其他实例
  • 理解对象成员

    • 函数是为避免冗余代码而构建的一种简单的可重用的容器
    • 当对象被传递到期望一个字符串参数值的alert()函数中,Object对象的toString()方法就会被调用;
    • DOM与别的对象一样,其各种对象和方法都是由Object对象和Function对象构成的;

创建自己的对象##

Array对象和Object对象是一样的,只不过Array扩展自Object,并且添加来额外的属性和方法;其他对象也是一样(除了Function)

  • 使用构造函数

function myConstructor(message) {
//公有属性
this.myMessage = message;
//公有方法
this.method = function() {
alert(this.myMessage);
};
//私有属性
var separator = '-';
var myOwner = this;
//私有方法
function alertMessage() {
alert(myOwner.myMessage);
};
alertMessage(); //私有方法只能在实例化的时候调用
//特权方法(也是公有方法)
this.appendToMessage = function(string) {
this.myMessage += separator + string;
alertMessage();
};
}
//也是公有方法
myConstructor.prototype.clearMessage = function() {
this.myMessage = '';
}
//静态属性
myConstructor.user = 'jefff';
//静态方法
myConstructor.alertName = function() {
alert(this.user);
}

浏览器中的解释程序在执行js代码之前,首先要对代码进行变量初始化,即初始化window对象之下的所有顶级变量;使用赋值语句实现的函数在初始化过程中不会立即声明,只有在解释器开始执行代码并执行到相应的赋值语句时,该函数才会被声明;函数定义实现的函数则在初始化的时候就被声明

关于this##

特别注意在监听事件的执行方法中,this指代监听的元素

  • 重定义执行环境
function bindFunction(obj, func) {
return function() {
func.apply(obj, arguments);
}
}

例子

function doubleCheck() {
this.message = 'Are you sure you want to leave?';
}
doubleCheck.prototype.sayGoodbye = function() {
//实际上执行的时候这里查找的this指代元素
return confirm(this.message);
}
function initPage() {
var clickedLink = new doubleCheck();
var links = A.getByTag('a');
for(var i = 0, len = links.length; i < len; i++) {
A.addEvent(links[i], 'click', clickedLink.sayGoodbye);
}
}
A.addEvent(window, 'load', initPage);

常用解决方法

function bindFunction(obj, func) {
return function() {
func.apply(obj, arguments);
}
}

上面代码关键在于,bindFunction返回的匿名函数使用来内部作用域中的arguments参数,作为外部作用域中的obj和func调用apply()时传递的额外参数

使用

 A.addEvent(links[i], 'click', bindFunction(clickedLink, clickedLink.sayGoodbye));

更加简单的方法

A.addEvent(links[i], 'click', clickedLink.sayGoodbye.bind(clickedLink));

最新文章

  1. 邮件中继成畅邮标配 U-Mail为何领先
  2. 【C-运算符】
  3. SpringMVC 中HttpMessageConverter简介和Http请求415 Unsupported Media Type的问题
  4. 使用JavaScript+Html创建win8应用(二)
  5. Netty4.x中文教程系列(三) Hello World !详解
  6. Ghost win7 系统安装(虚拟机)
  7. CODEFORCES#274 DIV2
  8. DB2使用存储过程插入数据
  9. 一个spinner控件使用的实例
  10. weblogic和was的巡检报告模板
  11. linux下安装mysql解决乱码、时间差、表的大小写问题
  12. shell脚本--continue、break
  13. 数据库连接池优化配置(druid,dbcp,c3p0)
  14. 参与.net开源项目开发
  15. AE开发
  16. transformNative_libsWithStripDebugSymbolForDebug
  17. js将json格式的list转换为按某个字段分组的map数组
  18. HALCON形状匹配(转)
  19. gulpfile配置
  20. MySQL——存储引擎

热门文章

  1. SpringMVC,3种不同的URL路由配置方法(这根本不是一个小问题)
  2. Mysql 基础3
  3. 【编程题目】在从 1 到 n 的正数中 1 出现的次数
  4. CString 操作
  5. Foreign key (referential) constraints on DB2 LUW v105
  6. sp_who使用
  7. Android -- getQuantityString无效
  8. grep -v 排除多人字符串
  9. WPA: 4-Way Handshake failed - pre-shared key may be incorrect
  10. static_cast、dynamic_cast、reinterpret_cast、const_cast以及C强制类型转换的区别