Object.prototype 属性表示 Object 的原型对象。
一个典型的对象继承了 Object.prototype 的属性(包括方法),尽管这些属性可能被覆盖。
Object.prototype.constructor
特定的函数,用于创建一个对象的原型。此属性的值是对函数本身的引用,而不是一个包含函数名称的字符串。
所有对象都会从它的原型上继承一个 constructor 属性:
var o = {}; o.constructor === Object; // true var o = new Object; o.constructor === Object; // true var a = []; a.constructor === Array; // true var a = new Array; a.constructor === Array // true var n = new Number(3); n.constructor === Number; // true
function Tree(name) { this.name = name; } var theTree = new Tree("Redwood"); console.log( "theTree.constructor is " + theTree.constructor ); 打印输出: theTree.constructor is function Tree(name) { this.name = name; }
能够继承原型的语法
- Object.create()
ES5方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。
Object.create(proto, [propertiesObject])
proto新创建对象的原型对象。const person = { isHuman: false, printIntroduction: function () { console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`); } }; const me = Object.create(person); me.name = "Matthew"; // "name" is a property set on "me", but not on "person" me.isHuman = true; // inherited properties can be overwritten me.printIntroduction(); // expected output: "My name is Matthew. Am I human? true"
- Function.prototype.bind()
bind() 最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的 this 值。this.x = 9; var module = { x: 81, getX: function() { return this.x; } }; module.getX(); // 返回 81 var retrieveX = module.getX; retrieveX(); // 返回 9, 在这种情况下,"this"指向全局作用域 // 创建一个新函数,将"this"绑定到module对象 var boundGetX = retrieveX.bind(module); boundGetX(); // 返回 81
不能够继承原型链的语法
- Object.create(null)
ES5的语法 - Object.setPrototypeOf 方法改变原型链
推荐使用Object.create() 来改变原型引用
Object.getPrototypeOf()
方法返回指定对象的原型。
const prototype1 = {};
const object1 = Object.create(prototype1);
console.log(Object.getPrototypeOf(object1) === prototype1);
// expected output: true
prototypeObj.isPrototypeOf(object)
方法用于测试一个对象是否存在于另一个对象的原型链上。
obj.hasOwnProperty(prop)
方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性,不包括继承来的属性
instanceof运算符
用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置;
多个frame或多个window不适用。
function Car(make, model, year) { this.make = make; this.model = model; this.year = year; } var auto = new Car('Honda', 'Accord', 1998); console.log(auto instanceof Car); // expected output: true console.log(auto instanceof Object); // expected output: true