javasript对象与原型

先解释一下原型。每个javascript对象都和另个都行有关联。“另一个”对象就是我们熟知的原型,每一个对象都从原型继承属性。

要理解原型我想应该先把对象理解清楚。

对象

他是javascript的基本数据类型。也可以看做是一个属性的无序集合,每个属性都有一个名/值对。对象的方法通常是继承的属性,这种原型式的继承javasript的核心特征。

每个对象拥有三个相关的对象特性。

  • 对象的原型指向另外一个对象,本对象的属性继承自他自己的原型对象。
  • 对象的类是一个标识对象对象类型的字符串
  • 对象的扩展标记指明了是否可以向该对象添加新属性。

对象的创建可以通过对象直接量,关键字new和object.create()函数三种方法来创建。

对象直接量

 1 var empty={};                                 //没有任何属性的对象
 2 var point={m:0,n:0};                       //两个属性
 3 var point2={m:point.m,n:point.n+1};//更复杂的属性
 4 var book={
 5     "main title":"javascript",            //属性名字里有空格,必须用字符串标示
 6     "sub-title":"the definitive guide",//连字符也是要用字符串标示
 7     "for":"all audiences",                //for是保留字,因此必须用引号
 8     author:{                                 //这个属性的值是一个对象
 9         firstname:"david";           //注意这里的属性名都没有引号
10         surname:"flanagan"
11     }
12 };                                                                   

通过关键字new

1 var a=new Array();         //创建一个空数组
2 var d=new Date();          //创建一个表示当前时间的Date对象
3 var r=new RegExp(“js”); //创建一个可以进行模式匹配的RegExp对象

通过object.create()创建

它是一个静态函数,而不是提供给某个对象调用的方法。使用他的方法很简单,只需要传入所需的原型对象即可:

1 var 01=Object.create({x:1,y:2});     //01继承了属性x和y2 var 02=Object.create(null);       //02不继承任何属性和方法

如果想创建一个普通的空对象,需要传入Object.prototype

3 var 03=Object.create(Object.prototype); //03和new Object()一样

接下来我们通过原型继承创建一个新对象

//inherit()返回了一个继承自原型对象P的属性的新对象

function inherit(p){  if(p==null) throw TypeError();    //  p是一个对象,但是不能为空  if(Object.create)          //如果Object.create()存在      return Object.create(p);  //直接使用它  var t=typeof p;           //否则进一步检测  if (t!=="object" && t!=="function") throw TypeError();  function f(){};          //定义一个空的构造函数  f.prototype=p;            //将其原型属性设置为P  return new f();            //使用f()创建p的继承对象}
时间: 2024-10-17 23:50:00

javasript对象与原型的相关文章

MDN——javascript——入门——第三章对象——对象.构造函数.原型链.继承——知识点总结

对象Object 由属性property(变量).方法method(函数)组成 var objectName = { member1Name : member1Value, member2Name : member2Value, member3Name : member3Value } member(成员)的值是任意的, 一个如上所示的对象被称之为对象的字面量(literal)——手动的写出对象的内容来创建一个对象.不同于从类实例化一个对象,我们会在后面学习这种方式. 访问对象成员 1.点表示法

内置对象和自定义对象的原型链

内置对象的原型链 新增属性 Object.prototype.mytest = function() { alert("123"); } var o = new Object(); o.mytest(); 重写属性 Object.prototype.toString = function() { alert("破话之王"); } o.toString();

Js中找任意对象的原型方法及改造原型

Java中有运行时类型识别,js可以很方便的模仿这个特性,因为所有js对象都有一个属性constructor(构造器),表示这个对象的构造方法,原型与构造方法同名,所以可以通过这儿知道任意对象的原型名称.具体可以看代码(这里简单的封装了): function runToChain(obj){ var chainName=obj.constructor.name; return chainName; } 知道对象原型后,可以通过原型的prototype属性为原型添加可改造属性和方法,改造原型.

理解javascript 对象,原型对象、闭包

javascript作为一个面向对象的语言,理解 对象.原型.闭包.模块模式等技术点对于成为一名合格的javascript程序员相当重要,多年没写过blog,今天就先拋个玉,在下基本也不做前端,但颇感兴趣,愿意和大家一起学习.此篇只是对自己认为的比较重要的知识点进行了说明,连贯性不是特别好,大家共同进步. 注意:文中中文并非英文翻译,只是个人理解. 理解面向对象 对象(object) An object is a collection of properties and has a single

对象和原型(上)

面向对象是javascript核心内容之一,今天就来讨论对象和原型. 首先讨论创建对象几种常见的方式: (1) 最经典,最简单的方法.利用object var o=new Object();//创建对象; o.name='jack';//添加属性 o.sayName=function(){alert(this.name);}//添加方法; 点评:这种方法明显不适合创建多个对象. (2)对象字面量形式:注意语法格式 var o={ name:'jack', sayName:function(){a

javascript之对象,原型链

对象 ECMAScript是高度抽象的面向对象语言,处理对象的.同样也有基本类型,但是他们在需要的情况下,也可以转型成对象. 定义: 对象是拥有一系列属性以及唯一的原型对象.那原型对象可能是对象,也可能为空. 让我们看一个基本对象的例子.对象的原型是通过内部的[[Prototype]]来引用的.然而,我们将会用 __<internal_property>__ 下化线符号替代双中括号,那么对于原型对象: __proto__. 对于下面代码: var foo = { x: 10, y:20 };

JavaScript概念总结:作用域、闭包、对象与原型链

1 JavaScript变量作用域 1.1 函数作用域 没有块作用域:即作用域不是以{}包围的,其作用域完成由函数来决定,因而if /for等语句中的花括号不是独立的作用域. 如前述,JS的在函数中定义的局部变量只对这个函数内部可见,称之谓函数作用域. 嵌套作用域变量搜索规则:当在函数中引用一个变量时,JS会搜索当前函数作用域,如果没有找到则搜索其上层作用域,一直到全局作用域. [javascript] view plain copy print? var  value = 'global';

面向对象之构造函数、实例对象、原型

一.面向对象首先有一个需求,点击按钮改变div的样式.按照常规的思维来写,我们可能是先获取到目标元素,然后给目标元素添加事件,在事件中书写div需要改变的样式属性.如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text

Javascript中的对象和原型(3)

在Javascript中的对象和原型(二)中我们提到,用构造函数创建的对象里面,每个对象之间都是独立的,这样就会降低系统资源的利用率,解决这样问题,我们就要用到下面提到的原型对象. 一 原型对象 原型对象实际上就是构造函数的一个实例对象,和普通的实例对象没有本质上的区别.可以包含特定类型的所有实例的共享属性或者方法.这样,如果我们需要修改所有实例中的属性或者方法,就只需要修改一处,就能够影响到所有实例了.因为原型中的属性和方法是共享的.我们可以看下两个图示:       构造函数方式 原型模式方