ECMAScript面向对象——之原型对象

原型对象

1、每只要创建一个新的函数,就会根据默认的规则创建一个prototype属性,这个属性指向函数的原型对象。

2、原型对象有一个constructor构造函数属性,又指回它所在的函数

3、如果函数是构造函数,那么由这个函数创建的实例有一个内在的指针[不可操作]也指向该函数的原型对象

关系图如下:

上图中实例的[[prototype]]是不能直接通过代码访问的。所以要判断某个原型对象是不是某个实例的原型的时候,

可以通过以下两种方式来判定:

1、Person.prototype.isPrototypeOf(person1)==true

2、Object.getPrototypeOf(person1)==Person.prototype

属性查找原则

可以利用原型模式定义对象。但在读取实例的属性的时候,属性的搜索原则是:实例自身->原型对象

也就是说如果在实例中重写了 原型中的属性或者方法的话,那么就会直接使用实例的重写的。

判断一个实例是否有某个属性值

1、in操作符   "name" in person1——在实例或者原型中有都返回true

2、实例调用person1.hasOwnPrototype("name")方法 ——如果在实例中有返回true

3、ES5中用Object.keys(person1)方法返回实例拥有的所有可枚举的属性(实例的都可以)

4、getOwnPropertyNames(person1),返回所有实例的属性

时间: 2024-10-14 20:31:36

ECMAScript面向对象——之原型对象的相关文章

javascript面向对象系列第一篇——构造函数和原型对象

× 目录 [1]构造函数 [2]原型对象 [3]总结 前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如何用构造函数和原型对象来创建对象 构造函数 构造函数是用new创建对象时调用的函数,与普通唯一的区别是构造函数名应该首字母大写 function Person(){ this.age = 30; } var person1 = new Person(); console.log(person1.ag

JS中面向对象的,对象理解、构造函数、原型、原型链

6.1 理解对象 6.1.1 对象属性类型 ECMS属性有两种类型:数据属性和访问器属性 1 数据属性 [[configurable]] 表示能否通过Delete 删除属性从而从新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性.对象上定义的属性默认值为true [[enumerable]] 表示能否通过for-in循环返回属性.直接在对象上定义的属性,它们的这个特性默认值为true [[writable]] 表示能否修改属性值.像前面例子中那样直接在对象上定义的属性,它们默认值为t

javascript面向对象——构造函数和原型对象

一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如何用构造函数和原型对象来创建对象 构造函数 构造函数是用new创建对象时调用的函数,与普通唯一的区别是构造函数名应该首字母大写 function Person(){ this.age = 30; } var person1 = new Person(); console.log(person1.age);//30 根据需要,构造函数可以接受参数 function

js(面向对象,继承与原型对象)

一.定义: 程序用来描述的生活中的具体事务(对象:是封装一个事物属性与功能的程序结构):主要是用于大程序的维护 二.创建面向对象 1.自定义对象直接量(创建对象) 语法:var obj = { 属性名:属性值, ....:...., 方法名:function(){..this.属性名..}, ... } 举例:var lilei={ sname:"Li Lei", sAge:12, intr:function (){ console.log("I'm "+this.

JavaScript中的面向对象编程,详解原型对象及prototype,constructor,proto,内含面向对象编程详细案例(烟花案例)

面向对象编程: 面向:以什么为主,基于什么模式 对象:由键值对组成,可以用来描述事物,存储数据的一种数据格式 编程:使用代码解决需求 面向过程编程: 按照我们分析好的步骤,按步骤解决问题 优点:性能比面向对象高,适合跟硬件联系很紧密的东西 缺点:没有面向对象那么容易维护,复用,扩展 面向对象编程: 把事务分解成一个个对象,然后由对象之间分工与合作,分工明确,每一个对象都是功能中心 面向对象特性:封装性.继承性 .多态性 封装性:将一个功能封装起来,小封装 将多个函数封装起来,整体封装起来形成一个

Javascript 面向对象一:封装数据个方法,从原型对象生成实例

一. 生成对象的原始模式 假定我们把猫看成一个对象,它有"名字"和"颜色"两个属性. var Cat = { name : '', color : '' } 现在,我们需要根据这个原型对象的规格(schema),生成两个实例对象. var cat1 = {}; // 创建一个空对象 cat1.name = "大毛"; // 按照原型对象的属性赋值 cat1.color = "黄色"; var cat2 = {}; cat2.n

面向对象中构造函数,原型对象和实例的关系图

总结 以下代码为例 function Person(){} Person.prototype.c=function(){} var p1=new Person(); var p2=new Person(); 1.构造函数有一个prototype属性,(任何函数都有这个属性)这个属性表示原型对象 Person.prototype 2.构造函数的原型对象有个consturctor属性,指向构造函数本身 Person.prototype.constructor===Person 3.构造函数的原型对象

JS面向对象-原型对象,实例对象,构造函数的关系

JS中每创建一个函数,该函数就会自动拥有一个prototype属性,为什么那??  因为最根上的object拥有一个prototype属性,而js中所有的对象又都继承自object,所以js中所有的对象都拥有一个prototype属性,而在js中函数也是对象,所以js中每个函数也都有一个prototype属性. 例如:function Person(){...} 和function Dog(){...} 而每一个prototype属性又会获得一个constructor属性 该constructo

面向对象-原型对象

创建对象 Js中可以用构造函数模式创建对象,如: function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = function () { alert(this.name); } } var person1 = new Person("Nicholas", 29, "aa"); var person2 = new Person(&q