javascript对象的遍历、内存分布和封装特性

一、javascript对象遍历

1.javascript属性访问
对象.属性
对象[属性] //字符串格式

  1. //javascript属性的访问方法
  2. var ren ={};
  3. ren.name="张三";
  4. ren.sex="男";
  5. ren.eat=function () {
  6. alert("吃饭");
  7. }
  8. alert(ren.name);
  9. alert(ren["name"]);

2.javascript属性遍历
for in

  1. //javascript属性遍历
  2. var ren ={};
  3. ren.name="张三";
  4. ren.sex="男";
  5. ren.eat=function () {
  6. alert("吃饭");
  7. }
  8.  
  9. for (var i in ren) {
  10. alert(ren[i])
  11. }

通过arguments来遍历传入的参数

  1. function myArray () {
  2. var lengs= arguments.length;
  3. for (var i=0; i<lengs; i++) {
  4. this[i]=arguments[i];
  5. }
  6. }
  7. var arr=new myArray(1,2,3);
  8. alert(arr[0]);

二、内存分布

三、对象的特性之封装
把对象所有的组成部分组合起来,尽可能的隐藏对象的部分细节,使其受到保护。
只保留有限的接口和外部发生联系。

  一、工厂函数

  1. //工厂函数
  2. function dianshi (color,size,brand) {
  3. var Tv={};
  4. Tv.color=color;
  5. Tv.size=size;
  6. Tv.brand=brand;
  7. Tv.look=function () {
  8. alert("看电视");
  9. }
  10. Tv.play=function () {
  11. alert("玩游戏");
  12. }
  13. Tv.dvd=function () {
  14. alert("DVD");
  15. }
  16. return Tv;
  17. }
  18.  
  19. var ds=dianshi("red","30inch","sony");
  20. //alert(typeof ds)
  21. alert(ds.color)
  22.  
  23. var ds1=dianshi("blue","40inch","changh");
  24. alert(ds1["size"])

  二、构造函数 

  1. //构造方法的形式
  2. function Tv(color,size,brand) {
  3. this.color=color;
  4. this.size=size;
  5. this.brand=brand;
  6. this.play=function () {
  7. alert("玩游戏");
  8. }
  9. this.look=function () {
  10. alert("看电视");
  11. }
  12. this.dvd=function () {
  13. alert("DVD");
  14. }
  15. }
  16. var sony=new Tv("red","20 inch","sony");
  17. alert(sony.color) 

  三、prototype方法

  对原型属性的修改将影响到所有的实例

  1. //prototype方法
  2. function Tv(color,size,brand) {
  3. this.color=color;
  4. this.size=size;
  5. this.brand=brand;
  6. this.play=function () {
  7. alert("玩游戏");
  8. }
  9.  
  10. }
  11.  
  12. Tv.prototype.look=function () {
  13. alert("看电视");
  14. }
  15. Tv.prototype.dvd=function () {
  16. alert("DVD");
  17. }
  18. Tv.prototype.aaa={name:"张三"};
  19. var sony=new Tv("red","20 inch","sony");
  20. var changhong =new Tv("red","20 inch","CH");
  21. // delete sony.color
  22. // delete sony.play
  23. // delete sony.look
  24. // alert(sony.color)
  25. // alert(sony.play)
  26. // alert(sony.look)
  27. // sony.look();
  28. // changhong.look();
  29.  
  30. alert(sony.aaa.name="李四");
  31. alert(changhong.aaa.name);

  四、混合方法

  1. //混合方式
  2. function Tv(color,size,brand) {
  3. this.color=color;
  4. this.size=size;
  5. this.brand=brand;
  6. this.play=function () {
  7. alert("玩游戏");
  8. }
  9.  
  10. Tv.prototype.aaa={name:"张三"};
  11.  
  12. }
  13.  
  14. Tv.prototype.look=function () {
  15. alert("看电视");
  16. }
  17. Tv.prototype.dvd=function () {
  18. alert("DVD");
  19. }

javascript对象的继承和Object对象

对象的一个类可以从现有的类中派生,并且拥有现有的类的方法或是属性,这和过程叫做继承。被继承的类叫做父类或是基类,继承的类叫做子类。

(一个对象拥有另一个对象的属性和方法)

优点:

提高代码的重用性

提高代码的可维护性

提高代码的逻辑性

一、Object对象

var obj=new Object()

属性:

  1.constructor
  对创建对象的函数的引用(指针)。

  1. //1.constructor
  2. //对创建对象的函数的引用(指针)
  3.  
  4. var obj=new Object();
  5. alert(obj.constructor)

  2.Prototype 原型

  **********************************************
  对该函数对象的对象原型的引用。是函数对象的默认属性

  **********************************************

  1. //Prototype
  2. //对该函数对象的对象原型的引用。
  3.  
  4. var obj=new fun1();
  5. function fun1 () {
  6. this.name="zhangsan";
  7. }
  8. alert(obj.prototype)
  9. alert(fun1.prototype)

  A.对象的共享属性存放到代码段当中。

  B.可以实现继承。

方法:

  A.hasOwnProperty(property)
  判断对象是否有某个特定的属性,返回true或者false

  1. alert(obj.hasOwnProperty("name"))

  B.IsPrototypeOf(object)
  判断该对象是否为另一个对象的原型。(用来检测对象的类型)

  var arr=new Array();
  alert(Array.prototype.isPrototypeOf(arr))

  c.运算符
  instanceof

   java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例

  1. alert(arr instanceof Array)

二、继承

1.原型继承

  1. function person () {
  2. this.name="张三";
  3. this.say=function () {
  4. alert(this.name)
  5. }
  6. }
  7.  
  8. function student () {
  9. }
  10. student.prototype=new person()
  11.  
  12. var zhangsan=new student ();
  13. zhangsan.say()

2.对象冒充的形式
  A.call
  obj1.fun.call(obj2,参数1......)

  B.apply
  obj1.fun.call(obj2,[参数1,参数2....])

  让对象1的方法冒充成对象2的方法。

  1. //对象冒充
  2. /*
  3. function person () {
  4. this.name="张三";
  5. this.say=function () {
  6. alert(this.name)
  7. }
  8. }
  9.  
  10. function student () {
  11. this.name="李四";
  12. }
  13. var ren=new person ();
  14. var zhangsan=new student ();
  15.  
  16. ren.say.call(zhangsan)
  17.  
  18. */
  19. function person (name) {
  20. this.name=name;
  21. this.say=function () {
  22. alert(this.name)
  23. }
  24. }
  25.  
  26. function student () {
  27. window.person.apply(this,["zhangsan"])
  28. }
  29.  
  30. var zhangsan=new student ();
  31. alert(zhangsan.name)
  32. zhangsan.say();

对象的继承顺序

一、对象的继承顺序

  1. //对象的继承顺序
  2. Object.prototype.say=function () {
  3. alert("我是顶层的方法");
  4. }
  5. function person () {
  6. this.say=function () {
  7. alert("我是父类的方法");
  8. }
  9. }
  10.  
  11. person.prototype.say=function () {
  12. alert("我是父类原型的方法");
  13. }
  14.  
  15. function study () {
  16. this.say=function () {
  17. alert("本身的方法");
  18. }
  19.  
  20. }
  21. study.prototype=new person();
  22. study.prototype.say=function () {
  23. alert("本身原型的方法");
  24. }
  25. var zhangsan=new study ();
  26. alert(zhangsan.say)

JavaScript学习笔记——对象知识点的更多相关文章

  1. JavaScript学习笔记-对象

    枚举对象的属性:通常用for(...in...)来循环遍历,由于 for in 总是要遍历整个原型链,因此如果一个对象的继承层次太深的话会影响性能 for(var i in foo){ if(foo. ...

  2. JavaScript学习笔记——对象分类

    对象的分类 一.对象的分类 1.内置对象 Global Math 2.本地对象 Array Number String Boolean Function RegExp 3.宿主对象 DOM BOM 二 ...

  3. JavaScript学习笔记——对象基础

    javascript对象基础 一.名词解释: 1.基于对象 一切皆对象,以对象的概念来编程. 2.面向对象编程(oop Object oriented programming) A.对象 就是人们要研 ...

  4. JavaScript学习笔记及知识点整理_3

    1.js的事件冒泡及阻止方法:事件冒泡的概念:在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事 ...

  5. JavaScript学习笔记及知识点整理_2

    1.一般而言,在Javascript中,this指向函数执行时的当前对象.举例如下: var someone = { name: "Bob", showName: function ...

  6. JavaScript学习笔记及知识点整理_1

    一.js的基础部分 1.==和===的区别:==在判断是否相等的时候会进行类型转换,有时会得到非常奇怪的结果,因此一般情况下都是用===判断是否相等2.strict模式:在js中,如果一个变量没有用v ...

  7. JavaScript学习笔记——对象的创建

    对象是JavaScript基本数据类型,在JavaScript中除了Undefined.Null.布尔型(ture.false).字符串和数字之外,其他的都属于对象. 在JavaScript中,一个对 ...

  8. JavaScript:学习笔记(9)——Promise对象

    JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...

  9. JavaScript:学习笔记(8)——对象扩展运算符

    JavaScript:学习笔记(8)——扩展运算符 对象的扩展运算符 扩展运算符是三个点(...).用于取出参数对象的所有可遍历属性,然后拷贝到当前对象之中. 如上图所示,新建了一个对象a,然后通过扩 ...

随机推荐

  1. extjs5 一个容器中有几个组件公用一个控制器和一个模型

    Ext.define('TestViewModel', { extend: 'Ext.app.ViewModel', alias: 'viewmodel.test', // connects to v ...

  2. centos 20T硬盘(超过16T)分区

    最近新买了一台服务器DELL R730 首先我们做了一个raid 1 和raid 5 在raid 1 上安装系统 安装完系统之后,现在要进行分区了,那个raid 5 做完之后,实际大小是19T 所以这 ...

  3. Servlet作业2-将表单提交的商品信息输出到页面中

    1,表单页面 shangpin.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...

  4. javascript 红宝书笔记之数据类型

      typeof   检测给定变量的数据类型,通过typeof来区分函数和其它对象   var message = 'some string'; console.log(typeof(message) ...

  5. Eclipse-导入maven项目

    在Eclipse project explorer中右击,在弹出框中选择import,得到如下图所示: 选择Existing Maven Projects,并点击Next,得到如下图所示对话框: 选择 ...

  6. Android GUI系统

    图解Android - Android GUI 系统 (1) - 概论 图解Android - Android GUI 系统 (2) - 窗口管理系统 图解Android - Android GUI ...

  7. 关于property的一些知识

    @property (nonatomic,assign,readonly) CGRect retweetViewFrame; retweetViewFrame设置为readonly,只有get方法,没 ...

  8. 【BZOJ-1441】Min 裴蜀定理 + 最大公约数

    1441: Min Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 471  Solved: 314[Submit][Status][Discuss] De ...

  9. 20150706 test2

    净心守志:可会至道.譬如磨镜:垢去明存.断欲无求:当得宿命

  10. 用python来调试网络程序

    需要联调的程序,沟通联调起来总是各种麻烦,如果自己能写个简单一点的“测试机”,事情就很easy了:或者有时候想做“中间人”,看看网路上到底传些什么.前面写了串口的测试机,今天尝试了一下UDP的. im ...