一切都是对象
- 值类型
- 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;
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());

- 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