对象中包含的##

  • 分类(内置对象: 注意这些都是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. 最牛逼android上的图表库MpChart(二) 折线图

    最牛逼android上的图表库MpChart二 折线图 MpChart折线图介绍 MpChart折线图实例 MpChart效果 最牛逼android上的图表库MpChart(二) 折线图 最近工作中, ...

  2. October 5th 2016 Week 41st Wednesday

    Don't follow the crowd, let the crowd follow you. 不要随波逐流,要引领潮流. But to be a good follower is already ...

  3. July 8th, Week 28th Friday, 2016

    Care and diligence bring luck. 谨慎和勤奋带来好运气. Just as we have said before, diligence is the mother of g ...

  4. 1 Ionic和Hybird应用介绍

    1.Ionic是什么,它和Angular.Cordova有什么关系? Ionic通过整合各种技术和功能使构建Hybird应用更加快速.容易和美观.Ionic生态系统基于Angular和Cordova, ...

  5. IT人学习方法论(一):学习方向

    07年的时候曾经讲过一节Webcast,名叫<使您成为Windows专家的一些学习习惯 >.直到最近,还经常收到听众关于这一节课反馈和心得的电子邮件,可见学习方法论是大家非常关心的问题.因 ...

  6. JavaScript的内置对象和浏览器对象

    在javascript中对象通常包括两种类型:内置对象和浏览器对象,此外,用户还可以自定义对象. 对象包含两个要素:1.用来描述对象特性的一组数据,也就是若干变量,通常称为属性.2.用来操作对象特性的 ...

  7. jQueryEasyUi验证

        多重验证: { field : 'startPort', title : "起始端口", editor: "text", width : 50, edi ...

  8. SQL——触发器——插入触发器——边学边项目写的。

    需求: 项目表项目编码触发器编写 为项目表DwProject编写触发器,目的为当创建新项目时,且ProjectNo 为Null或空字符串时,自动创建项目编号,编号格式为4位年号,2位月份,2位顺序号, ...

  9. jQuery ajax同步的替换方法,使用 $.Deferred()对象

    function aa() { var defer = $.Deferred(); $.ajax({ url: "/Handler1.ashx", type: "post ...

  10. jQuery发送ajax请求

    利用jquery发送ajax请求的几个模板代码. $.ajax({ async : false, type: 'POST', dataType : "json", url: &qu ...