分类原因:
分类就可以少占内存
new语法
将函数与原型结合
函数的特征
- 都有prototype属性,存储原型地址
- 每个prototype都有一个constructor属性,是来告诉别人构造这个属性的爹是谁
new语法的写法和特征
newX()
特征
- 自动创建一个新的对象
- 自动为空对象关联原型,原型地址为X.prototype
- 自动将不知道叫什么的空对象,作为this语法的关键字,来运行构函数(构造函数是指创建对象的函数)
- 自动return this
eg.
function Person(name, age) {//()里写变量名,function Person{}里面写自身所有属性
this.name = name;
this.age = age;
}
Person.prototype.sayHi = function() {//这里Person.prototype.后面加共有属性的名字,且下面写的是共有属性
console.log("你好,我叫" + this.name);
};
let person = new Person("frank", 18);
person.name === "frank"; // true
person.age === 18; // true
person.sayHi(); // 打印出「你好,我叫 frank」
构造函数X(名字为X)
- X函数本身负责给对象添加属性
- X.prototype对象负责保存对象的共有属性
规范
- 大小写
- 所有构造函数首字母大写,被构造的对象首字母小写
- 词性
- 构造函数中,new后面的函数名字为名词
eg
new Person()
- 其他函数用动词开头
eg.
createSquare
Tips:
Js构造函数不一定只有一个参数,具体的可以看mdn文档
class 语法
- JS 构造对象目前有两种方式,一种是用构造函数+prototype(new语法),一种是用 class,关于这两种方式,两者方式 JS 都支持,JS 是一门包容的语言,提供了多种表达形式,两者方式都能表达程序员的思想。
- 构造函数+prototype 是先提供的,class 是后提供的,说明 构造函数+prototype 是 JS 一开始的基因,而 class 的粉丝其实更喜欢 class,所以两种都有必要学习。
class是es6新出的功能,与prototype那个语法功能相同
eg.
constructor(name, age) {//()里面写的是变量名
this.name = name;//{}constructor里面写的是自身所有属性
this.age = age;
}
sayHi() {//constructor外面外面这里写的是公有属性,Sayhi是共有属性的名字
console.log("你好,我叫" + this.name);
}
}
let person = new Person("frank", 18);
person.name === "frank"; // true
person.age === 18; // true
person.sayHi(); // 打印出「你好,我叫 frank」
类
数组对象
- 定义数组
let arr=[1,2,3]===let arr=new Array(1,2,3)
2.自身属性:长度(无法用object.keys查出)
- 常用API,上mdn查
函数
- 定义函数
eg.
function fn(x,y){return x+y}
===let fn=function fn(x,y){return x+y}
===let fn=(x,y)=>{x+y}
## 原型公式
如何确定原型:
let obj=new Object()
new什么,就是什么.prototype,比如这里就是Object.prototype
对象.___proto___===构造函数.prototype
## 坑
1. 属性不等于属性值,属性是名,是key,属性值是值。
2. JS类型不等于JS分类,类型是四基而空一对象,分类的是只有对象有分类,
JS 中的类型有:数字、字符串、布尔、符号Symbol、null、undefined、对象
JS 中的类有:对象 Object、数组 Array、函数 Function 等
3. Object.prototype
* 是一个对象(这么说不严谨,应该说 Object.prototype 保存着一个对象的地址)
* 包含了 toString、valueOf、hasOwnProperty 等对象共有的属性
* Object.prototype 是所有对象的原型(除了它自己)
* Object.prototype 自己的原型为 null,Object.prototype 是根对象
4. window.Object 是一个函数对象,那么这个函数对象的构造函数是Function
5. window.Function 是一个函数对象,那么这个函数对象的构造函数是Function
6. window.Object 是一个函数对象,那么这个对象的 __proto__ 是Function.prototype
7. window.Function 是一个函数对象,那么这个对象的 __proto__ 是Function.prototype
网友评论