资讯专栏INFORMATION COLUMN

从Array到Null

ccj659 / 407人阅读

摘要:问题等方法前面不写定义一个数组,并打印确实没有等方法问题既然是由构造函数构造的实例,为什么没有继承的方法静态方法只能通过类构造函数本身调用不能通过实例调用定义静态方法我是方法我是方法之前定义静态方法我是方法实例报错再回头看问题方法的调用方式

Array

问题1:isArray、from、of等方法前面不写prototype?
let a1 = [1, 2, 3]
console.dir(a1)
// 定义一个数组a1,并打印a1
// 确实没有isArray等方法

问题2:a1既然是由构造函数Array()构造的实例,为什么没有继承Array的方法?
// 静态方法
// 只能通过 类/构造函数 本身调用
// 不能通过 实例 调用
class Array1 {
  static isArray() {  // ES6定义静态方法
    console.log("我是isArray方法")
  }
  map() {
    console.log("我是map方法")
  }
}
Array1.forEach = function() {  // ES6之前定义静态方法
  console.log("我是forEach方法")
}
let a1 = new Array1()
console.log("实例a1", a1)
// a1.isArray()
// 报错: a1.isArray is not a function

再回头看 问题1
// 方法的调用方式
let a2 = [1, 2, 3]
a2.push(4)
Array.isArray(a2)

// 构造函数prototype 里的方法会被继承到实例里面
// Array的prototype 里的方法会被继承到实例a2里面
a2.__proto__ === Array.prototype
a2.__proto__.constructor === Array

// 1、构造函数为Array
// 2、原型对象为Array.prototype, 所有由Array生成的实例都会继承里面的方法
// 3、a2.__proto__ 指向原型对象
// 4、a2._proto__.constructor指向构造函数
Null
a2.__proto__.constructor // ƒ Array() { [native code] }
a2.__proto__.constructor === Array
// a2的构造函数为Array

Array.__proto__.constructor // ƒ Function() { [native code] }
Array.__proto__.constructor === Function
// Array的构造函数为Function

Function.__proto__.constructor // ƒ Function() { [native code] }
Function.__proto__.constructor === Function
// Function的构造函数为Function

Function.prototype.__proto__.constructor
Function.prototype.__proto__.constructor === Object
// ƒ Object() { [native code] }
// Function

Object.prototype.__proto__.constructor 
// Cannot read property "constructor" of null
Object.prototype.__proto__ === null

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110051.html

相关文章

  • NDK开发 - JNI数组数据处理

    摘要:传送门开发数组数据处理中的数组分为基本类型数组和对象数组,它们的处理方式是不一样的,基本类型数组中的所有元素都是的基本数据类型,可以直接访问。 很多时候利用 NDK 开发都是为了对数据进行加密操作,因为单纯的 Java 太容易被反编译了,加密算法也就很容易被破解,而利用 C/C++ 开发可以加大破解难度。文件的数据加密就需要通过 byte 数组传给 JNI。 传送门:NDK开发 - J...

    appetizerio 评论0 收藏0
  • 读lodash源码之slice看稀疏数组与密集数组

    摘要:例如其中的为,但是数组中没有元素,是稀疏数组而每个位置都是有元素的,虽然每个元素都为,为密集数组。那稀疏数组和密集数组有什么区别呢在中最主要考虑的是两者在迭代器中的表现。截取并返回新数组为新数组容器。 卑鄙是卑鄙者的通行证,高尚是高尚者的墓志铭。 ——北岛《回答》 看北岛就是从这两句诗开始的,高尚者已死,只剩卑鄙者在世间横行。 本文为读 lodash 源码的第一篇,后续文章会更新到...

    lijy91 评论0 收藏0
  • Laravel 管道流原理

    摘要:管道流原理强烈依赖函数,我们先来了解下函数的使用。第二次迭代时,的值为上述返回的闭包伪代码,的值为,返回一个闭包,当我们执行这个闭包时,满足,得到结果。自定义中间件为的管道流核心类在的方法中,为上述的闭包,为要通过的中间件数组,为对象。 Laravel管道流原理强烈依赖array_reduce函数,我们先来了解下array_reduce函数的使用。 原标题PHP 内置函数 array_...

    Mr_zhang 评论0 收藏0
  • 简单总结一下JS的Array对象

    摘要:简单总结一下的对象属性数组指定创建一个数组的函数。方法数组返回一个迭代器,它返回数组的键值对。方法数组返回满足回调函数中指定的测试条件的第一个数组元素的索引值。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。 简单总结一下JS的Array对象 constructor 属性(数组) 指定创建一个数组的函数。该属性可用于判断某个对象是否为数组与arr ins...

    malakashi 评论0 收藏0
  • es6常用数组操作及技巧汇总

    摘要:检测数组或者检测对象的原型链是否指向构造函数的对象或者终极大招注意不可以用此方法检查常用方法合并多个数组,返回合并后的新数组,原数组没有变化。返回值是由被删除的元素组成的一个数组。 定义数组 const array = [1, 2, 3]; 或者 const array = new Array(); array[0] = 1; 建议尽量使用第一种形式定义数组,采用new的形式在大量的数...

    Noodles 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<