面向对象
2017-05-12 本文已影响26人
辉夜乀
var object = new Object() 时,发生了什么?
- 创建一个空对象作为
this
-
this.__proto__
指向构造函数的prototype
- 运行构造函数
- 返回
this
以上步骤通过关键字 new 全部搞定
如何手动指定对象的原型链
有 3 种方法
-
object.__proto__ = {...}
优点:简单直接;
缺点:这是ES6的方法,IE8以下不支持; -
借用 new
var myProto = {
name: 'foo'
}
var obj = {}
var Temp = function(){}
Temp.prototype = myProto
obj = new Temp()
-
使用 Object.create(proto)
以proto对象为原型,创建一个新的对象
JS实现类的继承
var Animal = function(){
this.种类 = "动物"
}
Animal.prototype.say = function(){
console.log(this.种类 + "叫");
}
var Cat = function(){
Animal.apply(this, arguments)
this.tail = "猫尾巴"
}
//下面三行代码只为了实现 Cat.prototype.__proto__ = Animal.prototype
//为了兼容IE67
var F = function(){};
F.prototype = Animal.prototype;
Cat.prototype = new F();
//纠正一下 constructor
Cat.prototype.constructor = Cat;
//给 Cat 赋自己的属性
Cat.prototype.run = function(){
console.log("猫儿在跑");
}
Cat.prototype.say = function(){
console.log("喵喵喵");
}
var cat = new Cat()
console.dir(cat)
Paste_Image.png
不用类也能实现继承
var animal = {
"种类": "动物",
say: function(){
console.log("动物叫");
}
}
var cat = Object.create(animal) // 创建以 animal 为原型的空对象
cat.tail = "猫尾巴"
cat.say = function(){
console.log("喵喵喵");
}
console.dir(cat)
Paste_Image.png