做网站英文怎么写,网页设计师的发展路径,thinkphp2.1网站挂文件,做网站都用什么语言一、创建对象有几种方法
字面量创建对象 1-1. 什么是字面量 字面量就是所见即所#xff0c;指的是常量#xff1b;用来为变量赋值时的常数量 代码例子#xff1a;123#xff1b;‘ABC’, {name: ‘张三’}, undefined #xff0c; true 生活例子#xff1a;门店的招牌指的是常量用来为变量赋值时的常数量 代码例子123‘ABC’, {name: ‘张三’}, undefined true 生活例子门店的招牌手机号身份证排队号
1-2 字面量对象 通过字面量的方式创建对象
let o1 {name: 张三, age: 22}
// 生活例子 一个叫张三的对象Object 方法创建对象 2-1 Object方法将输入的参数转换为对象 ① null 和 undefined 返回空对象 ② 数字返回数字类型的对象字符串返回字符串类型对象函数返回函数对象 ③ 参数如果是对象返回参数本身 生活例子Object方法类似于分类你把任意物品给到某个人或机器然后他会对物品分类 比如 给香蕉水果香蕉菠菜 蔬菜菠菜薯片零食薯片
2-2 Object 方法创建对象
let o2 new Object({name: 菠菜})
// 生活例子一个名叫菠菜的对象构造函数创建对象 3-1 什么是构造函数 用 new 关键字来调用的函数称为构造函数。构造函数首字母一般大写
let M function () {this.name 243
}
// 普通函数
console.log(M)
ƒ () {this.name 243
}
// new M()构造函数 , 构造函数返回函数内部的对象如果内部有定义属性返回内部属性对象如没有返回空对象
console.log(new M())
M {name: 243}3-2 用构造函数创建对象
let M function () {this.name 张三
}
let o3 new M()
o3
M {name: 张三}Object.create创建一个新对象 静态方法以一个现有对象作为原型创建一个新对象
var P {name: o4}
var o4 Object.create(P)
o4
{}二、原型、构造函数、实例、原型链
let M function () {this.name 张三
}
let o3 new M()构造函数 普通函数被new 使用后就是构造函数 M就是构造函数实例实例是类的具象化产品而对象是一个具有多种属性的内容结构实例都是对象而对象不全是实例。构造函数可以通过 new运算符 生成一个实例例如o3构造函数也是函数所有函数上都有prototype属性函数声明时自动生成构造函数的prototype属性指向原型对象初始化空对象原型对象 的构造器 constructor 默认指向声明的构造函数
M.prototype.constructor M
true实例的__proto__属性指向原型对象即构造函数的prototype属性
o3.__proto__M1.prototype
true7. 原型链创建一个实例对象通过实例对象的__proro__属性找创建实例的原型对象一直往上找直到找到构造函数Object的prototype属性指向的原型对象原型链的顶点为null, 这个链条就是原型链
o5.__proto__.__proto__ Object.prototype
true
o5.__proto__.__proto__.__proto__
// null原型对象增加属性和方法都可以被实例所继承所以当多个实例有相同的方法就可以存在原型对象上
let M function (name) {this.name name
}
let o3 new M()
M.prototype.say function () {console.log(你好)
}
o3.say()
// 你好构造函数的__proto__属性 等于 函数的原型对象
M.__proto__ Function.prototype三、instanceof的原理
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上
// o3 是 M构造函数的一个实例
o3 instanceof M
true
// o3 是原型链上构造函数的实例
o3 instanceof Object
true
// M的原型对象的__proto__ Object的原型对象
M.prototype.__proto__ Object.prototype
true// o3的__proto__的构造器 M表示o3由M构造函数直接生成
o3.__proto__.constructor M
true
// o3的__proto__的构造器 不等于Object表示o3不是由Object 构造函数直接生成
o3.__proto__.constructor Object
false四、new运算符
new 运算符的工作原理
let M function (name) {this.name name
}
let o3 new M()new 的第一个步骤一个新对象被创建新对象继承构造函数的原型对象 var o3 new M() o3 继承 M.prototype 上的方法和属性构造函数M被执行。 执行的时候相应的参数会被传入同时上下文this会被指定为这个新实例 PS当构造函数不传递参数时 new M 等同于 new M()如果构造函数返回了一个对象那么这个对象会取代整个new出来的结果。如果构造函数没有返回对象那么new出来的结果为步骤1创建的对象空对象
var new2 function (func) {// 步骤1和2var o Object.create(func.prototype)// 步骤3 var k func.call(o)// 步骤4if (typeof k object) {return k} else {return o}
}o6 new2(M)
M {name: 张三}
o6 instanceof M
true
o6 instanceof Object
true
o6.__proto__.constructor M
true