js Object.create 初探
阿新 • • 發佈:2018-12-10
ins ctype 繼承 text microsoft 內部實現 技術 1.0 charset
1、作用
Object.create()
方法創建一個新對象,使用現有的對象來提供新創建的對象的__proto__。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create
2、Object.create內部實現
Object.create = function (o) {
var F = function () {};
F.prototype = o;
return new F();
};
Object.create是內部定義一個對象,並且讓F.prototype對象 賦值為引進的對象/函數 o,並return出一個新的對象。
3、使用Object.create實現繼承
說明:以下示例使用Object.create創建的對象obj,obj只有父類的prototye上的屬性和方法。不具有父類示例上的方法。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
< meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>使用Object.create實現繼承</title>
</head>
<body>
<script src="https://cdn.bootcss.com/lodash.js/4.17.10/lodash.min.js"></script>
<script type="text/javascript">
var Base = function() {
//實例屬性
this.a = 2
}
//原型屬性
Base.prototype.a = 3;
//原型方法
Base.prototype.sayA = function() {
return this.a
};
//創建實例o1
var o1 = new Base();
//創建實例o2
var o2 = Object.create(Base.prototype);
console.log(o1)
console.log(o2)
//打印實例
console.log(o1.a); //2
console.log(o2.a); //3
console.log(o1.sayA()); //2
console.log(o2.sayA()); //3
console.log(o1 instanceof Base); //true
console.log(o2 instanceof Base); //true
</script>
</body>
</html>
4、new做了什麽操作
var obj = {}; obj.__proto__ = Base.prototype; Base.call(obj);
總結來說:obj的__proto__指向父類的原型對象,因此可以訪問父類原型對象上的方法。將父類的this指向obj,因此obj可以訪問父類實例上的方法和屬性。
js Object.create 初探