zoukankan      html  css  js  c++  java
  • Js的原型和原型链理解

    好多人不理解原型就是不理解这到底是什么东西(我就是), 看完本篇文章应该可以理解个大概

    原型是Js强大的功能之一, 在JS面向对象编程里, 原型是必不可少的知识储备

    Js有五种基本类型: String, Number, Boolean, undefined和null, 还有三种引用类型: Array, Object, Function

    例如对于array类型, 也有join, reverse, pop, shift等方法供我们调用 

    let arr = [];

    空空的数组,可是为什么会有方法供我们调用呢?  (这应该是很多人理解原型的切入点)

    每一个Js对象创建时都会从相应的原型继承基本的方法, 说白了就是其实我们使用的对象自带的方法保存在一个(或多个)对象里面, 这个对象就是原型

    函数有prototype属性和原型连接, 对象有[[proto]]属性(这不是一个标准方法, 但几乎每一个浏览器都提供一个__proto__来模拟)和原型连接, 并且和构造函数连接的原型是一个对象.

    以下在浏览器console里面运行:

    function test() {}
    var test1 = new test();
    test.prototype === test1.__proto__
    // 结果是true

    一直说的基于原型链的面向对象编程, 就是js的原型不是一成不变的, 我们可以通过这样的代码改变原型:

    function test() {}
    test.prototype = new function()

    如果需要共享的方法, 把它定义在new的function里面就可以了

    还有:

    let obj = new Object(null);

    这段Js代码会创建一个obj对象, 但是这个对象却继承于null, 所以,不会有任何内置方法, 就连最基础的tostring也没有

  • 相关阅读:
    GSS3 SPOJ 1716. Can you answer these queries III gss1的变形
    GSS1 spoj 1043 Can you answer these queries I 最大子段和
    Codeforces Round #197 (Div. 2) C,D两题
    sgu 185 最短路建网络流
    CF 208E
    QTREE2 spoj 913. Query on a tree II 经典的倍增思想
    BZOJ 1146: [CTSC2008]网络管理Network 树链剖分+线段树+平衡树
    ubuntu安装vim
    历史背景更新模型
    码本模型
  • 原文地址:https://www.cnblogs.com/jedenzhan/p/8728422.html
Copyright © 2011-2022 走看看