javascript prototype chain
发布日期:2021-11-30 16:11:47
浏览次数:4
分类:技术文章
本文共 1381 字,大约阅读时间需要 4 分钟。
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);// trueconsole.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.prototypeo.__proto__ = Person.prototype;o.sayHello();// hello world
var obj = {name:"kyfxbl"};var o = {};o.__proto__ = obj;console.log(o.name);// kyfxbl
转载地址:https://kyfxbl.blog.csdn.net/article/details/19477097 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月29日 04时17分44秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
关于Java接口interface定义的几点说明
2019-04-30
关于 Android 程序使用 Support Library 属性的几点说明
2019-04-30
关于Spinner控件几点说明
2019-04-30
关于fragment 嵌套的几点说明
2019-04-30
Java为什么需要static关键字
2019-04-30
Java数组声明、创建、初始化
2019-04-30
Java 自增自减运算符陷阱
2019-04-30
C#获取web.config配置文件内容
2019-04-30
asp.net 保存网页上的图片到本地
2019-04-30
Android 基于Http协议的文件上传
2019-04-30
Asp.net 搭建图片上传服务器
2019-04-30
Java 类的初始化过程
2019-04-30
Java内部类
2019-04-30
接口内部类
2019-04-30
正则表达式语法
2019-04-30
Java 为什么需要内部类
2019-04-30
Java的可变参数列表
2019-04-30
Java 容器类型的打印
2019-04-30
Asp.net获取User-agent
2019-04-30
判断浏览器是否为微信客户端浏览器
2019-04-30