JavaScript中的原型和对象机制

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属性

时间: 2024-11-05 13:45:47

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

JavaScript中的原型和继承

请在此暂时忘记之前学到的面向对象的一切知识.这里只需要考虑赛车的情况.是的,就是赛车. 最近我正在观看 24 Hours of Le Mans ,这是法国流行的一项赛事.最快的车被称为 Le Mans 原型车.这些车虽然是由"奥迪"或"标致"这些厂商制造的,可它们并不是你在街上或速公路上所见到的那类汽车.它们是专为参加高速耐力赛事而制造出来的. 厂家投入巨额资金,用于研发.设计.制造这些原型车,而工程师们总是努力尝试将这项工程做到极致.他们在合金.生物燃料.制动技术

【转】JavaScript中的原型和继承

请在此暂时忘记之前学到的面向对象的一切知识.这里只需要考虑赛车的情况.是的,就是赛车. 最近我正在观看 24 Hours of Le Mans ,这是法国流行的一项赛事.最快的车被称为 Le Mans 原型车.这些车虽然是由“奥迪”或“标致”这些厂商制造的,可它们并不是你在街上或速公路上所见到的那类汽车.它们是专为参加高速耐力赛事而制造出来的. 厂家投入巨额资金,用于研发.设计.制造这些原型车,而工程师们总是努力尝试将这项工程做到极致.他们在合金.生物燃料.制动技术.轮胎的化合物成分和安全特性上

javascript 中的原型继承

javascript圆形变成的基本规则: 所有数据都是对象: 要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它: 对象会记住它的原型: 如果对象无法响应某个请求,它会把这个请求委托给它自己的原型: 所有的数据都是对象 在javascript的类型中,分为两类:基本类型和复杂类型: 基本类型包括:undefined.number.boolean.string.null:基本类型可以通过包装类的方式变成对象类型数据来处理: 复杂类型:object; 1.1  包装对象:所谓"包装对

图解JavaScript中的原型链

转自:http://www.jianshu.com/p/a81692ad5b5d typeof obj 和 obj instanceof Type 在JavaScript中,我们经常用typeof obj和obj instanceof Type来识别类型,那么两者的区别在哪?先来看两段代码 <!--typeof obj的方式判断--> <script>    var str = "toby";    console.log(typeof str);// stri

JavaScript中的的垃圾回收机制

JavaScript中的的垃圾回收机制 javascript的垃圾回收原理 (1).在javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收: (2).如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收.

浅谈JavaScript中的原型模式

在JavaScript中创建对象由很多种方式,如工厂模式.构造函数模式.原型模式等: <pre name="code" class="html">//工厂模式 function createPerson(name,age,job) { var o = new Object; o.name = name; o.age = age; o.job = job; o.sayName = function() { alert(this.name); } retur

在JavaScript中生成自定义的对象

使用对象便于组织信息.下面我们介绍如何在JavaScript中生成自定义的对象. ---------------------- JavaScript 对象 在前面几章中我们学到JavaScript中有些内置的对象,比如String, Date, Array等等.除此之外,你还可以定义自己的对象. 对象是一种特殊的数据,含有属性和函数. 下面让我们用一个例子来说明:比如一个人是一个对象.属性是与对象有联系的值,比如人的属性包括姓名,身高,体重,年龄,肤色,眼睛的颜色等等.所有人都有这些属性,但是每

JavaScript中的防篡改对象

由于JavaScript共享的特性,任何对象都可以被放在同一环境下运行的代码修改. 例如: var person = {name:"caibin'} person.age = 21; 即使第一行定义了完整的person对象,那么第二行代码仍然可以对其添加属性,删除属性等. 我们有三个方法可以防止你做出这些行为. 一.不可扩展对象: 先来看person本身的扩展性: Object.isExtensible(person); // true 接下来执行: Object.preventExtensio

javascript中遇到的字符串对象处理

在javascript中对参数处理: 1 <script> 2 function getParam() 3 { 4 urlInfo=window.location.href; //获取当前页面的url 5 intLen=urlInfo.length; //获取url的长度 6 offset=urlInfo.indexOf("?"); //设置参数字符串开始的位置 7 strKeyValue=urlinfo.substr(offset,len); //取出参数字符串 这里会获