面向对象疑难点

1.实例的constructor属性指向什么?

function Person() {
    this.name = '天下';
}
var person = new Person();
console.log(person); //指向person实例
console.log('person123---',person.constructor);  //指向的是构造函数Person

为何呢?打印出的结果如下:
在这里插入图片描述

function Person5() {

}
var person5 = new Person5();

实例为何有一个constructor属性呢?

console.log('person5.constructor',person5.constructor); //构造函数Person5

实例的proto指针指向什么呢?

console.log('person5.__proto__',person5.__proto__); // 原型:{ constructor: f }

构造函数的prototype指向什么呢?

console.log('Person5.prototype',Person5.prototype); // 原型:{ constructor: f }

判断实例的proto指针和构造函数的原型是否相等

console.log('是否相等',person5.__proto__ === Person5.prototype); //true

person5.proto.constructor 和 person5.constructor

console.log('两者是否相等',person5.__proto__.constructor === person5.constructor ); //true

2.只要用instanceof操作符来测试实例与原型链中出现过的构造函数,结果就会返回true。这句话如何理解?
实例和构造函数的关系
3.使用isPrototypeOf()方法,只要是原型链中出现的原型,都可以说是该原型链所派生实例的原型。
原型和实例之间的关系
4.借用构造函数的继承如何理解?

function Person15() {
    this.colors = ['q','w','e','r'];
}

function Son15() {
    Person15.call(this);
    //为何返回的是undefined,因为Person15函数,并没有return
    //console.log('Person15.call(this)',Person15.call(this)); //undefined
    //执行之后的结果打印如下:
    console.log('this.colors---',this.colors);
}
var son15 = new Son15();
son15.colors.push('123');
console.log('son15.colors',son15.colors);

var son151 = new Son15();
console.log('son151.colors',son151.colors);

5.原型式继承的优点和缺点是什么呢?
6.值类型和引用类型的区别?
7.new 一个实例,发生了哪些步骤呢?

function Person() {
	this.name = '天下';
}
var person = new Person();
  1. new一个新的对象(相当于var obj = new Object(),new Object就相当于分配一块内存)
  2. 将构造函数中的作用域指向新的对象。(构造函数中的作用域原本指向window,如今指向obj)
  3. 执行构造函数中的代码(为这个新的对象添加属性)this指向obj。this.name = 123;就是obj.name = 123;
  4. 返回新的对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值