javascript是基于原型的继承,每个对象都有一个原型对象,原型对象又有自己的原型对象……这样组成一条“原型链”,直到Object.prototype为止,Object.prototype就没有原型对象了,它的原型对象指向null
当在一个对象上查找属性时,先在这个对象自己的属性里查找,称为own property,如果没有找到,就到它的原型对象上查找,直到Object.prototype为止
通过对象字面量创建的对象:
{name:"kyfxbl"}
它的原型对象直接就是Object.prototype
通过构造函数创建的对象:
function Person(){
}
Person.prototype.sayHello = function(){
}
var person = new Person();
原型对象是Person.prototype,Person.prototype的原型对象是Object.prototype
函数在javascript中也是对象,本质上也是通过构造函数创建的,构造函数是Function,所以每个函数的原型对象都是Funtion.prototype,Function.prototype的原型对象也是Object.prototype
function Person(){
}
var person = new Person();
console.log(Person.__proto__ == Function.prototype);// true
console.log(person.__proto__ == Person.prototype);// true
前面说过,原型对象是javascript引擎查找对象属性的时候隐式使用的,一般不会直接在代码中引用一个对象的原型对象,不过chrome,safari,firefox的实现,提供了一个__proto__属性,指向对象的原型对象
function Person(){
}
Person.prototype.sayHello = function(){
console.log("hello world");
}
var person = new Person();
console.log(person.__proto__ == Person.prototype);// true
利用这个属性,可以指定一个对象的原型对象,不过这并不是常见的做法,也不能保证可移植性,因为并非所有的javascript实现都支持这个属性:
function Person(){
}
Person.prototype.sayHello = function(){
console.log("hello world");
}
var o = {};
console.log(o.__proto__ == Object.prototype);// true,此时o的原型对象是Object.prototype
o.__proto__ = Person.prototype;
o.sayHello();// hello world
var obj = {name:"kyfxbl"};
var o = {};
o.__proto__ = obj;
console.log(o.name);// kyfxbl
分享到:
相关推荐
虽然 JavaScript 是脚本语言, 但它所支持的面向对象编程也是非常强大的。虽然它没有类和实例, 但它有对象, 原型和隐式的继承。...在另外一篇文章里, 我还会详细地讲解有关 "原型链 (prototype chain)" 的知识。
JavaScript中的继承是通过原型链(prototype chain)来完成的:每个对象内部都有另外一个对象作为其prototype而存在,对象从这个prototype中继承属性(property)。对于每个对象来说,可以用以下三种方式来访问其原型...
JavaScript 中没有父类, 子类的概念, 也没有class 和 instance 的概念, 全靠 prototype chain来实现继承. 当查找一个对象的属性时, JavaScript 会向上遍历 prototype chain, 直到找到对应的属性为止. 有几种方法, ...
安装npm install --save get-prototype-chain用法const getPrototypeChain = require ( 'get-prototype-chain' ) ;class A {}class B extends A {}class C extends B {}var obj = new C ( ) ;getPrototypeChain ( ...
IRL 所以……我决定就 Javascript 中的一些重要内容进行高级别的讨论,然后尝试举一个例子……以供记住…… 我预计这次谈话可能会崩溃和燃烧……所以当这种情况发生时……我会没事的……然后羞愧地躲到角落里。...
Defines the properties and methods inherited by objects in the Attr Constructor prototype chain. BehaviorUrnsCollection Constructor Defines the properties and methods inherited by objects in the ...
初学javascript一般很难理解Javascript语言的继承机制它没有”子类”和”父类”的概念,也没有”类”(class)和”实例”(instance)的区分,全靠一种很奇特的”原型链”(prototype chain)模式,来实现继承。...
这一语言功能的本质依赖于 JavaScript 特有的原型链(prototype chain)模式。 所以严格意义上说,JavaScript 是基于原型的面向对象语言。也就是说,每个实例对象都具有一个原型。对象从该原型中继承属性和方法。 1、...
它没有”子类”和”父类”的概念,也没有”类”(class)和”实例”(instance)的区分,全靠一种很奇特的”原型链”(prototype chain)模式,来实现继承。 我花了很多时间,学习这个部分,还做了很多笔记。...
The road to javascript developer pro> data-binding <> inheritation <类式继承(class)组合式继承(combination)构造函数式继承(constructor)多继承(multi)寄生式继承(parasitic)寄生组合式继承(parasitic-...
它没有”子类”和”父类”的概念,也没有”类”(class)和”实例”(instance)的区分,全靠一种很奇特的”原型链”(prototype chain)模式,来实现继承。 Brendan Eich设计javascript之初是为了实现网页与浏览器...
请看源码: 代码如下: function clone(o) { var F = function... var ExtObject = Ext.Object = { chain: function (object) { TemplateClass.prototype = object; var result = new TemplateClass(); TemplateClass.p
■Chapter 3: Creational Patterns: Singleton, Factory Method, and Prototype ■Chapter 4: Creational Patterns: Abstract Factory and Builder ■Chapter 5: Structural Patterns: Adapter, Bridge, Composite,...
什么这是纯JavaScript函数,旨在从原始javascript对象创建真实的硬拷贝。为什么它只是一个纯函数,最终的导入大小仅为662个字节。 它给你真正的硬拷贝,避免使用传播经营者,Object.assign和JSON.parse(JSON....
Must.prototype.chain() Must.prototype.isEnumerable() 希望这些最终将在永久公开。 用法 var must = require ( 'must' ) ; var mustPromise = require ( 'must-promise' ) ; mustPromise ( must ) ; 匹配器 ...
prototype ) ; /* [ 'constructor', 'toString', 'valueOf' ] */ allKeys ( Symbol . prototype ) ; /* Set { 'constructor', 'toString', 'valueOf', 'toLocaleString', 'hasOwnProperty', '...
熟悉的方法,包括Array.prototype.map , [].filter() , [].find() , [].some()等。 在JavaScript中创建Monad(只要它们包含指令序列的副作用)。 无点代码很容易实现(没有临时变量)。 更高的代码测试覆盖率...
完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎 正式发布表达式计算引擎WfcExp V0.9(附源码) 运算...
继承前 浏览器友好的增强继承与node.js的标准完全兼容, 和动态继承或创建。 该软件包修改并增强了节点环境中从node.js util模块inherits的标准。 它还具有不支持Object.create旧浏览器的填充程序。...