原型对象

原型对象的使用方法

  1. 利用对象的动态特性给原型对象添加成员
  2. 直接替换原型对象

注意:在替换原型之前创建的对象的原型和在替换原型对象之后创建的对象的原型不是同一个

使用原型的注意事项:

  1. 使用对象访问属性的时候,如果本身内找不到就会去原型中查找。但是使用点语法进行赋值的时候,并不会去原型中进行查找。使用点语法进行赋值的时候,对象中不存在该属性,就会给该对象新增属性,而不会去修改原型中的属性。
  2. 如果在原型对象中的属性是引用类型的属性,那么所有的独享共享该属性,并且任何一个对象修改了该引用类型属性的成员,其他对象也会受到影响,这种操作可以被认为是一种地址传递修改值的操作。
  3. 一般情况下不会将属性放到原型对象中。一般情况下原型里只会放共享的方法。

访问原型的方法:

  1. 通过构造函数访问原型对象

    1 function Person(name.age){
    2          this.name=name;
    3          this.age=age;
    4     }      

    Person.prototype,通过这种方式可以访问原型对象

  2. 通过对象(实例)访问原型对象
var p = new Person("曹操",45);

p.__proto__(一边是连个英文下划线),__proto__是一个非标准属性,这个属性不推荐使用,主要用来调试

新的原型对象替换默认的原型对象的问题:

新的原型对象替换默认的原型对象的之后,原型对象中的constructor属性会变成Object,为了保证整个     构造函数---原型---对象之间的关系的合理性,应做这样的操作:在替换原型对象的时候,在新的原型对象中手动添加constructor属性。

什么是constructor属性?

原型对象在创建的时候,默认会有一个constructor属性,这个属性实际上是以一个指针,指向了对应的构造函数

时间: 2024-08-02 07:24:57

原型对象的相关文章

js原型对象与Java类的区别

在我学习Javascript的原型对象时,我总是不自觉地拿Java的类思想来做比较,时间久了,我渐渐认识到二者有巨大的不同. 首先,类是不能直接当方法来运行,它最简便的方式是调用其静态方法:而原型对象本身就是一个方法体,它可以直接运行.二者在构造对象的过程中,js可以扮演两种角色,一个可以将原型对象当方法来使用,才接触js时,都是以这种形式来使用,即万物皆方法体,像c;另一个是模仿面向对象的特性,为原型对象定义属性,运用构造器时,将构造器构造的对象的指针指通过原型链指向原型对象的属性,从而实现面

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

原型对象 1.每只要创建一个新的函数,就会根据默认的规则创建一个prototype属性,这个属性指向函数的原型对象. 2.原型对象有一个constructor构造函数属性,又指回它所在的函数 3.如果函数是构造函数,那么由这个函数创建的实例有一个内在的指针[不可操作]也指向该函数的原型对象 关系图如下: 上图中实例的[[prototype]]是不能直接通过代码访问的.所以要判断某个原型对象是不是某个实例的原型的时候, 可以通过以下两种方式来判定: 1.Person.prototype.isPro

javascript模拟实现继承,继承一次父类模板和原型对象

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS

js重写原型对象

首先看两段很相似的代码: 1. function Person(){} Person.prototype = { constructor:Person, name:"Nic", age:"29", sayName:function(){ alert(this.name) } }; var friend1 = new Person(); //实例在这里 friend1.sayName(); 2. function Person(){} var friend2 = ne

Javascript构造函数、原型对象、实例的关系与区别

构造函数与普通函数的唯一区别,就在于调用方式.任何函数通过new形式调用,就都是构造函数. 原型对象,只要创建了一个函数,那么一定会为这个函数创建一个prototype属性.而这个属性指向的就是原型对象. 实例,是new构造函数之后的结果.它会包含一个[[prototype]]属性(该属性无法直接访问),该属性指向原型对象. function Person(){ } Person.prototype.name = "Nicholas"; Person.prototype.age = 2

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

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

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

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

[js高手之路]原型对象(prototype)与原型链相关属性与方法详解

一,instanceof: instanceof检测左侧的__proto__原型链上,是否存在右侧的prototype原型. 我在之前的两篇文章 [js高手之路]构造函数的基本特性与优缺点 [js高手之路]一步步图解javascript的原型(prototype)对象,原型链 已经分享过了. function CreateObj(uName) {             this.userName = uName;             this.showUserName = function

js原型对象

原型对象是什么? 在js中,每一个创建的的函数都会有一个prototype属性,这个属性指向一个对象,这个对象就是原型对象 function lla(){} console.log(lla.prototype); chrome浏览器下的结果: 原型对象能干啥? 首先,当你用new 调用了一个函数,就会创建一个对象实例然后返回这个对象 可以看到a是一个名叫lla的对象,有一个__prototype__的属性(后面介绍),这里可以认为这个对象是空的:为什么是空的呢?因为构造函数里面是空的: 如何才能