一切都是对象

  • 值类型
    • undefined number string boolean
    • 可以说使用typeof输出的集中类型的标识,不属于对象
  • 应用类型
    • 函数、数组、对象、null、new Number(10) 都是对象
    • 引用类型判断用instanceof
  • 对象
    • 对象里面的一切都是属性
    • 只有属性,对象里面的方法也是一种属性
    • 所有属性都表示为键值对的形式
    • 一切引用类型都是对象,对象是属性的集合

函数和对象的关系

  • 函数是引用类型,所以也是一种对象
  • 函数对象和数组却不一样,可以说数组是对象的一种,因为数组就像对象的一个子集,但是函数不一样
  • 对象都是函数创建的
//通过函数创建对象
function Fn() {
    this.name = '明';
    this.year = 1990;
}

var ming = new Fn();


// 通过下面的例子,可以看出对象都是函数创建的
var obj = { a: 10, b: 20 }
// 其实是一种快捷方式,叫语法糖,此代码本质是
var obj = new Object();
obj.a = 10;
obj.b = 20;
//其中,Object()就是函数

prototype原型

  • 函数是对象,因此也是属性的集合
  • js自己默认给函数一个属性————prototype,任何函数都有这个属性
  • prototype的属性值也是一个对象,默认有一个constructor属性,constructor的属性值指向这个函数本身

原型链(一)

function Fn() { }
Fn.prototype.name = '明';
Fn.prototype.getYear = function () {
    return 1988;
}

var ming = new Fn();
console.log(fn.name); //明
console.log(fn.getYeat());// 1988

原型链(一)

  • Fn是函数,f是从Fn函数new出来的,因此,可以调用Fn.prototype中的属性
  • f默认的因此属性__proto__,引用了创建这个对象的函数的prototype。即: f.__proto__ === Fn.prototype
  • f中的__proto__称为隐式原型

隐式原型

  • 每个对象的__proto__引用创建该对象的函数的prototype
    原型链(一)
  • 但是Object.prototype却是一个特例,它的__proto__指向null

原型链(一)

  • 自定义函数也是一种对象,它的__proto__指向Function.prototype
  • Function也是一个函数,该函数的__proto__也是指向它本身的prototype,即Function.prototype,形成了一个环状结构
  • Function.prototype也是一个普通对象,它是被Object创建的对象,所以Function.prototype的隐式原型__proto__引用Object.prototype
    原型链(一)

instanceof

  • 判断对象要用instanceof
  • A instanceof B
  • 沿着A的__proto__这条线,同时沿着B的prototype这条线,如果两条线能找到同一个引用,即同一个对象,那么就返回true
  • instanceof表示的就是一种继承关系,或者叫原型链的结构
    原型链(一)

相关文章:

  • 2022-12-23
  • 2021-11-14
  • 2021-05-08
  • 2021-08-21
猜你喜欢
  • 2021-05-14
  • 2021-12-23
  • 2023-03-31
  • 2021-11-11
  • 2021-09-02
  • 2021-11-02
相关资源
相似解决方案