原型链相关介绍

1. Object.createde 方法

是ES5中引入的方法,语法:

    Object.create(对象) -> 新对象

功能:实现继承,创建一个 原型继承 自参数对象,但是缺点是,不能实现复用

例如:

    var o = {
        sayHello: function () { console.log( ‘你好‘ ); }
    };

    var o1 = Object.create( o );
    // 创建一个新对象 o1, 该新对象的原型即 __proto__ 就是 o

2. 对象的原型链

  1. 凡是对象就有原型
  2. 原型也是对象

凡是对象就有原型,那么原型又是对象,因此凡是定义一个对象,那么就可以找到他的原型,原型还有原型, 那么如此下去,就构成一个对象的序列,称该结构为原型链

那么,问题来了:

  1. 原型链到底什么时候是一个头
  2. 一个默认的原型链结构是怎样的
  3. 原型链结构对一直语法的修正

2.1. 原型链的结构

凡是使用构造函数创建出来的对象,并且没有利用赋值的方式修改原型,就说该对象保留默认的原型链

默认的原型链结构是什么样子呢?

例子:

    function Person() {}
    var p = new Person();
    // p 具有默认的原型链

默认的原型链结构是: 当前对象 -> 构造函数.prototype -> Object.prototype ->null

在实现继承的时候,有时候会利用替换原型链结构的方式实现原型继承,那么原型链结构就会发生改变

    function ItcastCollection () {}
    ItcastCollection.prototype = [];
    var arr = new ItcastCollection();
    // arr -> [] -> Array.prototype -> Object.prototype -> null
    // var arr = new Array();

2.2. 什么是原型式继承

所谓的原型式继承就是利用修改原型链的结构(增加一个节点,删除一个节点,修改节点中的成员), 来使得实例对象可以使用整条链中的所有成员

这里的使用规则必须满足属性搜索原则(昨天有提到)

2.3. 绘制原型链的结构

举例:

  1. 绘制 {} 的原型链结构
  2. 绘制 [] 的原型链结构

在JS中,所有的对象字面在解析以后,就是一个具体的对象了,那么可以理解为调用的对象的构造方法

  1. 例如在代码中写上 {}, 就相当于 new Object()
  2. 例如代码中有 [], 就相当于 new Array()
  3. 例如代码中有 /./, 就相当于 new RegExp( ‘.‘ )

3. 函数的构造函数 Funtion

在JS中使用的Funtion 可以实例化函数对象,也就是说在JS中函数与普通对象一样,也是一个对象类型。

  1. 函数是对象, 就可以使用对象的动态特性
  2. 函数是对象, 就有构造函数创建函数
  3. 函数是函数, 可以创建其他对象
  4. 函数是唯一可以限定变量作用域的结构

3.1. 函数Function 的实例

语法:

    new Function( arg0, arg1, arg2, ..., argN, body );
  1. Function中参数全部是字符串
  2. 该构造函数的作用是将 参数连接起来组成函数
    • 如果参数只有一个,那么就表示函数体
    • 如果参数有多个,那么最后一个参数表示新函数体,前面的所有参数表示新函数的参数
    • 如果没有参数,表示创建一个空函数

例子1:创建一个打印一句话的函数

    // 传统的
    function foo () {
        console.log( ‘你好‘ );
    }
    // Function
    var func = new Function( ‘console.log( "你好" );‘ );
    // 功能上, 这里 foo 与 func 等价

例子2:利用 Function 创建一个函数, 要求允许函数调用时传入任意个数参数, 并且函数返回这些数字中最大的数字.

    function foo ( ) {
        // 所有的参数都在 arguments 中. 将其当做数组使用
        // 问题而已转换成在有一个数组中求最大值
        var args = arguments;
        var max = args[ 0 ];
        for ( var i = 1; i < args.length; i++ ) {
            if ( max < args[ i ] ) {
                max = args[ i ];
            }
        }
        return max;
    }

3.1.1. arguments 对象

arguments 是一个伪数组对象. 它表示在函数调用的过程中传入的所有参数的集合. 在函数调用过程中没有规定参数的个数与类型, 因此函数调用就具有灵活的特性, 那么为了方便使用, 在 每一个函数调用的过程中, 函数代码体内有一个默认的对象 arguments, 它存储着实际传入的所有参数.

4. 对象的原型链结构

任意一个函数,都是相当于 Function 的实例,类似于{}和new Object()的关系

    function foo () {}
    // 告诉解释器, 有一个对象叫 foo, 它是一个函数
    // 相当于 new Function() 得到一个 函数对象
  1. 函数应该有什么属性? __proto__
  2. 函数的构造函数是什么? Function
  3. 函数应该继承自 Function.prototype
  4. Fucntion.prototype 继承自 Object.protoype

4.1. 绘制函数的三角形结构

  1. Object 函数是 Function 的一个实例
  2. Object 作为对象是继承自 Function.prototype 的, 又 "Function.prototype" 继承自 Object.prototype
  3. Function 是自己的构造函数( * )
时间: 2024-11-15 23:03:57

原型链相关介绍的相关文章

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

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

小谈js原型链和继承

原型(prototype)在js中可是担当着举足轻重的作用,原型的实现则是在原型链的基础上,理解原型链的原理后,对原型的使用会更加自如,也能体会到js语言的魅力. 本文章会涉及的内容 原型及原型对象 原型链(JavaScript核心部分) 类的继承 instanceof constructor 我们先用一个构造器来实现一个构造函数: function A(){ this.mark = "A"; this.changeMark = function(){ this.mark += &qu

浅谈javascript的原型及原型链

浅谈javascript的原型及原型链 这里,我们列出原型的几个概念,如下: prototype属性 [[prototype]] __proto__ prototype属性 只要创建了一个函数,就会为该函数创建一个prototype属性,指向该函数的原型对象.实例对象是不会拥有该属性的.默认情况下,该原型对象也会获得一个constructor属性,该属性包含一个指针,指向prototype属性所在的函数. Person.prototype.constructor===Person [[proto

关于JS中原型链中的prototype与_proto_的个人理解与详细总结(代码示例+高清无码大图!——自备瓜子花生)

一直认为原型链太过复杂,尤其看过某图后被绕晕了一整子,今天清理硬盘空间(渣电脑),偶然又看到这图,勾起了点回忆,于是索性复习一下原型链相关的内容,表达能力欠缺逻辑混乱别见怪(为了防止新人__(此处指我)__被在此绕晕,图片就放在末尾了.) 以下三点需要谨记 1.每个对象都具有一个名为__proto__的属性: 2.每个构造函数(构造函数标准为大写开头,如Function(),Object()等等JS中自带的构造函数,以及自己创建的)都具有一个名为prototype的方法(注意:既然是方法,那么就

Js 原型对象与原型链

原型对象 每个javascript对象都有一个原型对象,这个对象在不同的解释器下的实现不同.比如在firefox下, 每个对象都有一个隐藏的__proto__属性,这个属性就是"原型对象"的引用. 原型链 由于原型对象本身也是对象,根据上边的定义,它也有自己的原型,而它自己的原型对象又可以有自 己的原型,这样就组成了一条链,这个就是原型链,JavaScritp引擎在访问对象的属性时,如果在对象本 身中没有找到,则会去原型链中查找,如果找到,直接返回值,如果整个链都遍历且没有找到属性,则

js 原型链(转)

1.1 理解原型链 JavaScript中几乎所有的东西都是对象,我们说数组是对象.DOM节点是对象.函数等也是对象,创建对象的Object也是对象(本身是构造函数),那么有一个重要的问题:对象从哪里来? 这是一句废话,对象当然是通过一定方式创建出来的,根据实际类型不同,对象的创建方式也千差万别.比如函数,我们可以声明函数.使用Function构造函数创建等,比如数组,我们可以直接通过var arr = [] 的方式创建空数组,也可以通过new Array的方式创建,比如普通的对象,我们可以字面

(转)认识原型对象和原型链

在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象 Object 和 函数对象 Function. 一般而言,通过 new Function 产生的对象是函数对象,其他对象都是普通对象. 举例说明: function f1() { // todo } var f2 = function () { // todo }; var f3 = new Function('x', 'console.log(x)'); var o1 = {}; var o2 = new O

介绍下Javascript原型和原型链的特点?

JavaScript原型: 每个对象都会在其内部初始化一个属性,就是prototype(原型). 原型链: 当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念. 特点: JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本.当我们修改原型时,与之相关的对象也会继承这一改变.

1、AJAX里面status的值代表什么 2、get post 的区别 3、怎样把对象转化成字符串 4、闭包、继承、原型、原型链 5 、http传输协议 6、arguments是什么

1.AJAX里面status的值代表什么     在JavaScript里面写AJax的时,最关键的一步是对XMLHttpRequest对象建立监听,即使用"onreadystatechange"方法.监听的时候,要对XMLHttpRequest对象的请求状态进行判断,通常是判断readyState的值为4且status的值为200或者304时执行我们需要的操作.以下记录了一些常用readState以及status的值及其含义 readyState 属性表示Ajax请求的当前状态.它的