const obj = {}
const obj = new Object()
const o1 = {
name:"张三",
age: 18,
sex:"男"
}
const o2 = {
name:"李四",
age:19,
sex:"女"
}
function createObj(n, a, s){
const obj = {};
obj.name = n;
obj.age = a;
obj.sex = s;
return obj;
}
const o1 = createObj("张三", 18, "男");
const o2 = createObj("李四", 19, "女");
__proto__
,指向函数的原型对象属性prototype
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.sayHello = function(){
console.log(`hello, 我是${this.name}`)
}
}
const p1 = new Person('小王', 18, "女");
const p2 = new Person('小赵', 19, "男");
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.sayHello = function(){
console.log(`hello, 我是${this.name}`)
}
}
const p1 = new Person('小王', 18, "女");
const p2 = new Person('小赵', 19, "男");
console.log( p1.sayHello === p2.sayHello ); // false
prototype
,对象类型。
**__proto__**
指向函数.prototype
__proto__
,对象类型。
**prototype**
对象.__proto__
__proto__
指向了创建该对象的构造函数的prototype
function Person(){}
const p1 = new Person()
console.log(p1.__proto__ === Person.prototype) // true
__proto__
属性,对象在使用属性或方法时,会先在自身查找,如果自身不存在,就会沿着__proto__
的指向,依次查找,任意一层找到了,就停止查找并使用,直到Object.prototype
,如果依然未找到,抛出undefined
prototype
添加方法或属性,将来的每个实例都可以访问,达到节省内存的效果prototype
类似于将来所有实例的公共空间,提供公共方法,被实例使用prototype
自带了一个constructor
的属性,用来标记当前prototype
对象所属的函数function Person() {}
Person.prototype.sayHi = function () {
console.log('hello Person')
}
const p1 = new Person()
const p2 = new Person()
p1.sayHi()
p2.sayHi()
console.log( p1.sayHi === p2.sayHi ); // true
p1 自身没有 sayHi 方法,就会去自己的 proto 中查找
p1.proto 就是 Person.prototype
因为我们提前向 Person.prototype 中添加了 sayHi 方法
所以 p1.sayHi 可以执行p2 自身没有 sayHi 方法,就会去自己的 proto 中查找
p2.proto 就是 Person.prototype
我们提前向 Person.prototype 中添加了 sayHi 方法
所以 p2.sayHi 可以执行了且因为 p1.proto 和 p2.proto 指向都是 Person.prototype
所以 p1.proto 和 p2.proto 相等
所以 p1.sayHi 和 p2.sayHi 找到的是同一个方法
function Person(name) {
this.name = name
console.log('构造函数体内的打印')
console.log('this : ', this)
console.log('*******************')
}
// 构造函数的原型对象上添加一个方法
// sayHi 方法内的 this 是谁 ?
Person.prototype.sayHi = function() {
console.log('我是原型上的 sayHi 方法')
console.log('this : ', this)
console.log('*******************')
}
//实例化一个p1对象
const p1 = new Person('张三')
//调用该方法
p1.sayHi()
console.log('p1', p1)