首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

javascript基础知识

对象是一个包含相关数据和方法的集合(通常由一些变量和函数组成,我们称之为对象里面的属性和方法)。在其他经典的面向对象的语言中我们并没有办法直接去创建对象,我们都需要先用class这样的关键词创建一个对象模板(被称为类),然后调用类的构造函数去初始化一个对象出来,在类中描述的属性和方法会复制一份到对象中去,然而对于javascript来说,情况并非如此(不像“经典”的面向对象的语言,从构建函数创建的新实例的特征并非全盘复制,而是通过一个叫做原形链的参考链链接过去的,所以这并非真正的实例,严格的讲, JavaScript 在对象间使用和其它语言的共享机制不同,这个后面再讲),我们可以直接创建一个对象而不需要对象模板,创建方法请参考第二节。

02

javaScript原型链

javaScript原型链 概念 JavaScript之继承(原型链) 数据结构 var Person = function(){}; Person.prototype.type = 'Person'; Person.prototype.maxAge = 100; 分支主题 prototype(原型) constructor(构造方法) Person.prototype.constructor === Person; 自己的构造,指向自己. 无限循环 proto(原型链) Person.prototype.proto === Object.prototype 指向Object对象prototype(原型) proto(原型链/遗传进化链) 第一层指向,Function对象prototype(原型) 分支主题 Person.proto === Function.prototype 同时Function对象的proto(原型链)也指向Function的prototype(原型) Function.proto === Function.prototype 第二层指向,Object对象prototype(原型) 分支主题 Person.proto.proto === Object.prototype 第三次指向,null Person.proto.proto.proto === null var p = new Person(); console.log(p.maxAge); p.name = 'rainy'; 分支主题 实例对象没有prototype原型属性 仅具有proto(原型链) 第一层指向,Person对象prototype(原型) new Person().proto === Person.prototype 第二层指向,Object对象prototype(原型) new Person().proto.proto == Object.prototype 第二层指向,还等同Person对象的第二层指向 new Person().proto.proto === Person.proto.proto 第三次指向,null new Person().proto.proto.proto === null prototype、proto的关系 dir(Array) 分支主题 dir(new Array()) new Array().proto === Array.prototype true Array.prototype 分支主题 Array. 分支主题 可访问form直接方法 也可访问Array.proto内方法 也可访问Array.proto.proto.... 内方法[继承] 检验是否非进化链proto继承的属性 分支主题 .hasOwnProperty("") 构造指向自己 Array.prototype.constructor === Array true Array.prototype.constructor.prototype.constructor.prototype.constructor .... function Array() { [native code] } proto 分支主题 遗传进化链 or 进化链指针 进化链指针 new String().proto === String.prototype JS内置构造器和自定义函数都是Function构造器的原型(prototype) Array.proto === Function.prototype true String.proto === Function.prototype true Function.proto === Function.prototype true 只有Function.prototype是函数(function)类型 分支主题 为了保证函数构造器们的proto指向的都是函数 不能new的目标 分支主题 没有构造函数(不是函数),不能new 分支主题 分支主题 function才有构造,object没有 继承控制 Object Object.setPrototypeOf(child, parent); Object.prototype.extend class class Porsche extends Car function inherits(Chinese, People) & People.call(this, name, age) inherits(Chinese, People) 分支主题 分支主题 分支主题 作用 c

02

Js原型链容易出错的面试题

由于构造函数B存在属性a,但是由于没有传入参数,导致属性a的值是undefined, 后来又一次执行了 B.prototype.a = 1;在B的原型上添加了属性a,并赋值为1,当查找属性或方法是,先查找自身,自身没有,再去原型链上的,如果在自身找到了,就会停止, 这个例子中,我们找到了a但是a的值是undefined,undefined也是值,找到了就停止,尽管原型链上还有值,js也不会继续查找下去。 实例化一个构造函数C并传入参数2,因为有参数,所以,构造函数C存在自有属性a,并且属性a的值为2 C.prototype.a = 1; 在C的原型对象上添加一个属性a,并且赋值1 然后就出现这样的情况,自有属性和原型属性都存在,这时候取值当然就是从自有属性中取

03
领券