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

一、javascript对象遍历

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

//javascript属性的访问方法
var ren ={};
ren.name="张三";
ren.sex="男";
ren.eat=function () {
alert("吃饭");
}
alert(ren.name);
alert(ren["name"]);

2.javascript属性遍历
for in

 //javascript属性遍历
var ren ={};
ren.name="张三";
ren.sex="男";
ren.eat=function () {
alert("吃饭");
} for (var i in ren) {
alert(ren[i])
}

通过arguments来遍历传入的参数

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

二、内存分布

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

  一、工厂函数

     //工厂函数
function dianshi (color,size,brand) {
var Tv={};
Tv.color=color;
Tv.size=size;
Tv.brand=brand;
Tv.look=function () {
alert("看电视");
}
Tv.play=function () {
alert("玩游戏");
}
Tv.dvd=function () {
alert("DVD");
}
return Tv;
} var ds=dianshi("red","30inch","sony");
//alert(typeof ds)
alert(ds.color) var ds1=dianshi("blue","40inch","changh");
alert(ds1["size"])

  二、构造函数 

    //构造方法的形式
function Tv(color,size,brand) {
this.color=color;
this.size=size;
this.brand=brand;
this.play=function () {
alert("玩游戏");
}
this.look=function () {
alert("看电视");
}
this.dvd=function () {
alert("DVD");
}
}
var sony=new Tv("red","20 inch","sony");
alert(sony.color) 

  三、prototype方法

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

 //prototype方法
function Tv(color,size,brand) {
this.color=color;
this.size=size;
this.brand=brand;
this.play=function () {
alert("玩游戏");
} } Tv.prototype.look=function () {
alert("看电视");
}
Tv.prototype.dvd=function () {
alert("DVD");
}
Tv.prototype.aaa={name:"张三"};
var sony=new Tv("red","20 inch","sony");
var changhong =new Tv("red","20 inch","CH");
// delete sony.color
// delete sony.play
// delete sony.look
// alert(sony.color)
// alert(sony.play)
// alert(sony.look)
// sony.look();
// changhong.look(); alert(sony.aaa.name="李四");
alert(changhong.aaa.name);

  四、混合方法

//混合方式
function Tv(color,size,brand) {
this.color=color;
this.size=size;
this.brand=brand;
this.play=function () {
alert("玩游戏");
} Tv.prototype.aaa={name:"张三"}; } Tv.prototype.look=function () {
alert("看电视");
}
Tv.prototype.dvd=function () {
alert("DVD");
}

javascript对象的继承和Object对象

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

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

优点:

提高代码的重用性

提高代码的可维护性

提高代码的逻辑性

一、Object对象

var obj=new Object()

属性:

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

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

  2.Prototype 原型

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

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

//Prototype
//对该函数对象的对象原型的引用。 var obj=new fun1();
function fun1 () {
this.name="zhangsan";
}
alert(obj.prototype)
alert(fun1.prototype)

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

  B.可以实现继承。

方法:

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

alert(obj.hasOwnProperty("name"))

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

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

  c.运算符
  instanceof

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

alert(arr instanceof Array)

二、继承

1.原型继承

function person () {
this.name="张三";
this.say=function () {
alert(this.name)
}
} function student () {
}
student.prototype=new person() var zhangsan=new student ();
zhangsan.say()

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

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

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

//对象冒充
/*
function person () {
this.name="张三";
this.say=function () {
alert(this.name)
}
} function student () {
this.name="李四";
}
var ren=new person ();
var zhangsan=new student (); ren.say.call(zhangsan) */
function person (name) {
this.name=name;
this.say=function () {
alert(this.name)
}
} function student () {
window.person.apply(this,["zhangsan"])
} var zhangsan=new student ();
alert(zhangsan.name)
zhangsan.say();

对象的继承顺序

一、对象的继承顺序

//对象的继承顺序
Object.prototype.say=function () {
alert("我是顶层的方法");
}
function person () {
this.say=function () {
alert("我是父类的方法");
}
} person.prototype.say=function () {
alert("我是父类原型的方法");
} function study () {
this.say=function () {
alert("本身的方法");
} }
study.prototype=new person();
study.prototype.say=function () {
alert("本身原型的方法");
}
var zhangsan=new study ();
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. Beta版本冲刺———第五天

    会议照片: 项目燃尽图: 1.项目进展: 困难:基本计划中增加的功能已经完成,但是在"如何保存每次游戏的分数,并将其排序列在排行榜中"遇到麻烦,现在小组都在一起协商攻克中.

  2. Percona 开始尝试基于Ceph做上层感知的分布式 MySQL 集群,使用 Ceph 提供的快照,备份和 HA 功能来解决分布式数据库的底层存储问题

    本文由 Ceph 中国社区 -QiYu 翻译 英文出处:Using Ceph with MySQL 欢迎加入CCTG Over the last year, the Ceph world drew m ...

  3. Java设计模式(七) 模板模式

    [模板模式]在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 1,定义模板类 package com.pattern ...

  4. IntelliJ_编译一直报错“找不到符号”

    执行maven compile时一直报错"找不到符号",类 XXX 各种clean.compile都不行 最后执行Rebuild Project一次后解决   执行rebuild ...

  5. css 小三角

    span{ display: inline-block; border-top: 100px solid red; border-right: 100px solid transparent; bor ...

  6. Ajax工作原理(转)

    1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...

  7. 轻快的VIM(三):删除

    这一节我们来看看删除,删除命令比较简单,不过要使删除更有效率 你需要配合我们第一节中讲的各种移动命令 字符删除 x 删除光标所在处字符 X 删除光标所在前字符 这里没有什么可注意的地方,但需要说明一下 ...

  8. const、static、extern三个关键字

    默认情况下,C语言的全局变量是全世界都可以访问的,也就是全局变量可以跨文件访问. extern可以引用全局变量 例如,如果有一个全局变量int money = 100;extern int money ...

  9. break 的一个“高级用法”(转)

    转载:http://blog.csdn.net/lovelan1748/article/details/5321558 本小节不是很适于没有多少实际编程经历的初学者,所以初学者可以跳过,以后再回头阅读 ...

  10. 55.Android之AsyncTask介绍 (转)

    AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...