new操作符
let squareList = []
let widthList = [5,6,5,6,5,6,5,6,5,6,5,6]
function Square(width){
this.width = width
}
Square.prototype.getArea = function(){
return this.width * this.width
}
Square.prototype.getLength = function(){
return this.width * 4
}
for(let i = 0; i<12; i++){
squareList[i] = new Square(widthList[i])
console.log(squareList[i].constructor)
}
new X()自动做了四件事
- 自动创建空对象
- 自动为空对象关联原型,原型地址指定为X.prototype
- 自动将空对象作为this关键字运行构造函数
-
构造函数X
X函数本身负责给对象本身添加属性
-
代码规范
所有构造函数首字母大写
- 所有被构造出来的对象,首字母小写
- new后面的函数使用名词形式
- 其他函数一般用动词开头
对象. proto === 其构造函数.prototype
类型vs类
类型
类型是JS数据的分类,分为number,string,symbol,boolean,null,undefined,object类
类是针对于对象的分类,有无数种,常见的有Array,Function,Date,RegExp等数组对象
定义一个数组
let arr = [1,2,3]
let arr = new Array(1,2,3) //元素为1,2,3
let arr = new Array(2) //长度为3
数组对象的自身属性
‘0’/‘1’/‘length’数组对象的共用属性
‘push’/‘pop’/‘shift’函数对象
定义一个函数
function fn (x,y) {return x + y)
let fn2 = function fn (x,y) {return x + y}
let fn = (x,y) => x + y
let fn = new Function ('x', 'y', 'return x + y')
函数对象的自身属性
‘name’/‘length’函数对象的共用属性
‘call’/‘apply’/‘bind’JS终极一问
window是谁创造的
Windowwindow.Object是谁创造的
window。Functionwindow.Function是谁创造的
window.Function
浏览器构造了Function,指定了它的构造者为自己,所有函数都是window.Function构造的。class和prototype两种写法
function Person (name, age) {
this.name = name
this.age = age
}
Person.prototype.sayHi = function () {
console.log("你好,我叫" + this.name)
}
class Person {
constructor(name, age) {
this.name = name
this.age = age
}
sayHi () {
console.log("你好,我叫" + this.name)
}
}