对象中包含的##

  • 分类(内置对象: 注意这些都是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));

DOM--2 创建可重用的对象的更多相关文章

  1. JavaScript DOM高级程序设计2.1创建可重用的对象--我要坚持到底!

    1.对象中包含什么 在javascript中,从函数到字符串实际上都是对象 继承 //创建一个person对象的实例 var penson={}; person.getName=function(){ ...

  2. Java避免创建不必要的对象

    小Alan最近看到了<Effective Java>这本书,这本书包含的内容非常丰富,这本书我就不多介绍了,只能默默的说一句,作为一名java开发错过了这本书难免会成为一个小遗憾,所以还是 ...

  3. Effective Java之避免创建不必要的对象

    Effective Java中有很多值得注意的技巧,今天我刚开始看这本书,看到这一章的时候,我发现自己以前并没有理解什么是不必要的对象,所以拿出来跟大家探讨一下,避免以后犯不必要的错误! 首先书中对不 ...

  4. JavaScript DOM动态创建(声明)Object元素

    http://www.cnblogs.com/GuominQiu/archive/2011/04/01/2002783.html 一文提及“等整个页面加载完毕后,根据用户所选的阅读机类型,再用Java ...

  5. Effective Java 第三版——6. 避免创建不必要的对象

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  6. Java 避免创建不必要的对象

    最好能重用对象而不是在每次需要的时候就创建一个相同功能的新对象.如果对象是不可变的,它就始终可以被重用. String s = new String("stringette"); ...

  7. Item 5 避免创建不必要的对象

    场景一: 这个是经常出现的问题,因为我们经常误用String. public class Test { public static void main(String[] args) { //参数&qu ...

  8. 重用UITableViewCell对象的概念

    重用UITableViewCell对象 UITableView控件十分常见,基本上我们随意打开一款App都能见到,它被用来列表展示数据,而其中的每一行内容都是一个cell对象 我们知道手机设备上的内存 ...

  9. DOM学习笔记(二)对象方法与属性

    所有 HTML 元素被定义为对象,而编程接口(对象的访问)则是对象方法和对象属性. 事实上,常用的只用window对象及其子对象document对象,以及事件Event对象. Window 对象 Wi ...

随机推荐

  1. div+css进度条

    效果图: 进度条代码: <style type="text/css"> 红色:background-color:f05153:border:1px solid #f05 ...

  2. 【QT】视频播放

    在网上没找到,在书上也没有.后来突然想直接在官网的类里面找Video 居然就有了. 把http://qt-project.org/doc/qt-5/qmediaplayer.html的例子补充完整后就 ...

  3. ld returned 1 exit status"的解决办法

    在Linux下创建线程时,编译时会出现下面的错误,[root@linuxserver 807]# gcc -o 22 22.c/tmp/cc21HcoW.o(.text+0x4c): In funct ...

  4. Android RadioButton selector背景

    RadioButton selector 背景 <?xml version="1.0" encoding="utf-8"?> <selecto ...

  5. Swift - 文件目录路径获取及数据储存(Home目录,文档目录,缓存目录)

    iOS应用程序只能在自己的目录下进行文件的操作,不可以访问其他的存储空间,此区域被称为沙盒.   应用沙盒结构分析 1.应用程序包:包含了所有的资源文件和可执行文件 2.Documents:保存应用运 ...

  6. 20145206邹京儒《Java程序设计》课程总结

    20145206邹京儒<Java程序设计>课程总结 (按顺序)每周读书笔记链接汇总 第一周:http://www.cnblogs.com/ZouJR/p/5213572.html http ...

  7. Delphi之DLL知识学习4---创建DLL

    下面是在Delphi中创建一个DLL的全过程,你将看到怎样创建一个接口单元,使之可以被其他的应用程序访问.并且将学会怎么把Delphi的窗体加入DLL中. 一.数美分:一个简单的DLL 下面是包含一个 ...

  8. Python 写Windows Service服务程序

    1.需求 为什么要开发一个windows服务呢?之前做一个程序,必须要读取指定目录文件License, 因为其他程序也在读取这指定目录的License文件,且License不同时会修改License的 ...

  9. sort函数用法

    原文链接:http://blog.csdn.net/csust_acm/article/details/7326418 sort函数的用法 做ACM题的时候,排序是一种经常要用到的操作.如果每次都自己 ...

  10. 在SSIS包中的事务处理

    在处理SSIS包的数据ETL操作过程中,我们经常遇到的一个问题就是一系列步骤在运行的过程中,如果中间的一个步骤失败了,那么我们就需要清理前面已经运行过的步骤所产生的数据或者结果,这往往是一个很头疼的过 ...