1、对象相关的一些语言特性

JavaScript里所有的东西都是对象, 对象是属性的集合。要知道,函数也是对象, 能够作为变量的值、 返回值、 参数或者属性的值。 函数对象特殊的地方是能通过"xxx()"语法执行包含在xxx函数对象内的代码。

2、对象的属性可以动态添加和删除

var foo = new Object();

// 为foo对象添加bar属性

foo.bar = "foobar";

alert(foo.bar); //foobar

// 删除foo对象的bar属性

delete foo.bar;

alert(foo.bar); //undefined

3、创建对象

JavaScript对每个创建的对象都会设置一个原型,指向它的原型对象。例如,创建一个Array对象:

var arr = [1, 2, 3];

其原型链是:

arr ----> Array.prototype ----> Object.prototype ----> null

当我们创建一个函数时:

function foo() {

return 0;

}

函数也是一个对象,它的原型链是:

foo ----> Function.prototype ----> Object.prototype ----> null

4、构造函数创建对象

先定义一个构造函数:

function Student(name) {

this.name = name;

this.hello = function () {

alert('Hello, ' + this.name + '!');

}

}

上面的函数就是一个普通的函数,但是在JavaScript中,用关键字new来调用这个函数,他就是构造函数:

var xiaoming = new Student('小明');

xiaoming.name; // '小明'

xiaoming.hello(); // Hello, 小明!

JavaScript的对象是由构造函数创建的, 每个对象都有constructor属性表示创建该对象的构造函数:

function Test() { this.a = "hello"; }

var test = new Test(); // 由Test构造函数创建

alert(test.constructor);

alert: function Test() { this.a = "hello"; }

构造函数也是对象, 构造函数是由内建的Function函数创建的:

function Test(a, b)

{

alert(a+b);

}

// 相当于:

Test = new Function(["a", "b"], "alert(a+b);");

Function是本机代码实现的固有对象. 不过为了一致性, Function也有constructor属性, 该属性指向它自己。

5、原型prototype

prototype是构造函数的一个属性, 该属性指向一个对象. 而这个对象将作为该构造函数所创建的所有实例的基引用(base reference), 当我们用obj.xxx访问一个对象的属性时,JavaScript引擎先在当前对象上查找该属性,如果没有找到,就到其原型对象上找,如果还没有找到,就一直上溯到Object.prototype对象,最后,如果还没有找到,就只能返回undefined。

/ prototype默认为new Object(); 为了方便, 记为p_obj

function Person(name) {

this.name = name;

}

// 为 p_obj 增加 sayName 属性

Person.prototype.sayName = function(){

alert(this.name);

}

var john = new Person("John"); // john 的 base reference指向p_obj

var eric = new Person("Eric");  // eric 的 base reference也是指向p_obj

// 注意sayName代码中的this将指向实例化后的对象(this绑定)

john.sayName(); // john对象本身没有sayName属性, 于是访问原型对象p_obj    的sayName属性

eric.sayName(); // 访问同一个原型对象p_obj的sayName属性

JavaScript中的原型和对象机制的更多相关文章

  1. (转载)JavaScript中的原型和对象机制

    (转载)http://www.cnblogs.com/FlyingCat/archive/2009/09/21/1570656.html 1 对象相关的一些语言特性 1.1 一切皆为对象JavaScr ...

  2. 深入了解JavaScript中基于原型(prototype)的继承机制

    原型 前言 继承是面向对象编程中相当重要的一个概念,它对帮助代码复用起到了很大的作用. 正文 Brendan Eich在创建JavaScript时,没有选择当时最流行的类继承机制,而是借鉴Self,用 ...

  3. JavaScript中的 原型 property 构造函数 和实例对象之间的关系

    1 为什么要使用原型? /* * javascript当中 原型 prototype 对象 * * */ //首先引入 prototype的意义,为什么要使用这个对象 //先来写一个构造函数的面向对象 ...

  4. 【转】JavaScript中的原型和继承

    请在此暂时忘记之前学到的面向对象的一切知识.这里只需要考虑赛车的情况.是的,就是赛车. 最近我正在观看 24 Hours of Le Mans ,这是法国流行的一项赛事.最快的车被称为 Le Mans ...

  5. javascript 中的原型继承

    javascript圆形变成的基本规则: 所有数据都是对象: 要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它: 对象会记住它的原型: 如果对象无法响应某个请求,它会把这个请求委托给 ...

  6. 理解JavaScript中的原型继承(2)

    两年前在我学习JavaScript的时候我就写过两篇关于原型继承的博客: 理解JavaScript中原型继承 JavaScript中的原型继承 这两篇博客讲的都是原型的使用,其中一篇还有我学习时的错误 ...

  7. javascript中的原型继承

    在Javascript面向对象编程中,原型继承不仅是一个重点也是一个不容易掌握的点.在本文中,我们将对Javascript中的原型继承进行一些探索. 基本形式 我们先来看下面一段代码: <cod ...

  8. 图解JavaScript中的原型链

    转自:http://www.jianshu.com/p/a81692ad5b5d typeof obj 和 obj instanceof Type 在JavaScript中,我们经常用typeof o ...

  9. Javascript中双等号(==)隐性转换机制 JS里charCodeAt()和fromCharCode()方法拓展应用:加密与解密

    Javascript中双等号(==)隐性转换机制   在Javascript中判断相等关系有双等号(==)和三等号(===)两种.其中双等号(==)是值相等,而三等号(===)是严格相等(值及类型是否 ...

随机推荐

  1. android 使用jdbc1.3.0 操作 sql server

    String connectDB = "jdbc:jtds:sqlserver://172.16.1.15:1433;DatabaseName=YanBu";// 连接字符串换成这 ...

  2. 初始化datetimepicker的时候就报了js异常

    全栈眼中的http这一章分别从前端视角和后端视角来分析前后端所关注的侧重点.前端可以通过抓包工具或者chrome devtools 查看每个请求,同域下的资源请求数量等来找出优化点,更关注的是一个页面 ...

  3. 准备学习Spring MVC

    这一系列笔记将带你一步一步的进入Spring MVC,高手勿喷. 首先你得安装以下的工具: JDK,虽然JDK8已经发布了一段时间了,但是由于我们并不会使用到里面的新特性,所以JDK6以上版本皆可以( ...

  4. VTID配置

    车牌过滤: [FilterByHour] text=${Channel},${Plate.type},${Frame.Time(%H)} all=true rule01= ^$,^$,^[]$ =&g ...

  5. iOS代码汉字转拼音

    NSString *hanziText = @"今天天气不错"; if ([hanziText length]) { NSMutableString *ms = [[NSMutab ...

  6. JAVA经典算法40题(供面试所用)

    [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:   兔子的规律为数 ...

  7. C#利用HttpWebRequest进行post请求的示例(HTTPS)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  8. Canvas的API整理

    canvas元素 可被用来通过脚本(通常是JavaScript)绘制图形.比如,它可以被用来绘制图形,制作图片集合,甚至用来实现动画效果.你可以(也应该)在元素标签内写入可提供替代的的代码内容,这些内 ...

  9. DOM树操作

    DOM 操作 访问与树关系(节点) 绘制 DOM 树: childNodes, attributes 从一个中心元素访问其所有的直系亲属元素 访问父节点: parentNode 访问上一个兄弟节点: ...

  10. XPath使用实例

    实例 1基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径 //BBB           选择所有BBB元素 /AAA/CCC 选择 ...