面向对象

2019-03-28  本文已影响0人  antimony

如下代码中, new 一个函数本质上做了什么?

function Modal(msg){
    this.msg = msg
}
var modal = new Modal()

1.执行 new Modal()
1.1创建一个空对象 {},假设名字是 tmpObj
1.2执行 Modal 函数,执行过程中对 this 操作就是对 tmpObj 进行操作
1.3 函数执行完后返回刚刚创建的 tmpObj
2.把 tmpObj 赋值给 modal (modal指向同一个对象)


画出如下代码的原型图。

function People (name){
  this.name = name;
}

People.prototype.walk = function(){
  console.log(this.name + ' is walking');  
}

var p1 = new People('饥人谷');
var p2 = new People('前端');
原型图

扩展 String 的功能增加 reverse 方法,实现字符串倒序

var str = 'hello jirengu'
var str2 = str.reverse()
console.log(str2) //  'ugnerij olleh'
var str = 'hello jirengu';

if(!String.prototype.reverse){
  String.prototype.reverse = function(){
    return Array.prototype.reverse.apply(this.split('')).join('');
  };
}

var str2 = str.reverse();

console.log(str2);

有如下代码,代码中并未添加 toString方法,这个方法是哪里来的?画出原型链图进行解释

function People(){
}
var p = new People()
p.toString()
原型图

1.当前对象为 p ,查找 toString 方法,先从 p 的属性里找,没有找到;
2.再从 p.proto 中找,没有找到;
3.再从 p.proto.proto 中找,找到后返回。

上一篇 下一篇

猜你喜欢

热点阅读