js原型和原型链个人理解(我的理解)
<script> //普通对象与函数对象,js万物皆是对象 //自带的 function a1() { function f1() {} var f2=function () {} var f3=new Function('str','console.log(str)'); var o3=new f1(); var ol={}; var o2=new Object();
console.log(typeof Object);//function console.log(typeof Function);//function console.log(ol);//object{} console.log(typeof o2);//object console.log(typeof o3);//object console.log(typeof f1);//function console.log(typeof f2);//function console.log(typeof f3);//function } //原型对象 function b1() { } function b2 () { console.log(b1.prototype);//b1 {} console.log( typeof b1.prototype);//object console.log(typeof Function.prototype);//function(特殊情况) console.log(typeof Object.prototype);//object console.log(typeof Function.prototype.prototype);//undefined } //原型作用:继承 var p1=function (name) { this.names=name; }; p1.prototype.getM1=function () { return this.names }; var name1=new p1(); name1.getM1(); //例子:原型链 console.log(name1.__proto__===p1.prototype);//true console.log(p1.prototype.__proto__===Object.prototype);//true console.log(name1.__proto__===Object.prototype);//false console.log(Object.prototype.__proto__);//null 最大的objct指向的是就是null,这样就表示是原型链 //疑点说明 console.log(Object.__proto__===Function.prototype);//true //Object它是函数对象,而且是指向Function的 console.log(Function.__proto__===Function.prototype);//true //Function与Object一样,但不同是指向Function.prototype; //上面的方式其实是按照现实中的方式来的 //从无到有的情况 //Function.__proto__===Object.prototype其实就是指向自己,没有任何意义 //js一切均是对象,函数也是对象 //constructor预定义属性,用于引用原型函数对象,是循环引用 //父类.prototype.constructor是全等于父类 //Object.constructor==Function,object本身 就是function函数构造的 //constructor是在该对象原型链上寻找的第一个constructor属性所指向的对象:自己总结下:也就是实例化对象指向父类的对象 function d1() {
} var d2=new d1(); console.log(d2.constructor==d1);//true console.log(d1.constructor==d2);//false //原型链生成是靠__proto__ 不是prototype var animal=function () {}; var dog=function () {}; animal.price=2000; dog.prototype=animal; var tidy=new dog; console.log(dog.price); console.log(tidy.price); //通过new方式生成的,会产生链,在操作时,new出来的实例化对象 //obj自动生成一个.__proto__属性,这样,如果没有生成.__proto__属性,使用别的属性时,会undefied未定义, //但如果使用了obj.attr时,因为obj是一个实例对象,所以在使用attr这个属性时,是不会报错的,会正常输出对应的数据 //只有子类或者实例化对象有__proto__(包括自己,不包括最上面的父类)方法 //prototype会给父类和自自己这个类,如果子类被孙子类继承,那么子类也将有prototype和__proto__属性
js原型和原型链个人理解(我的理解)的更多相关文章
- JS基础-该如何理解原型、原型链?
JS的原型.原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对 ...
- 前端【JS】,深入理解原型和原型链
对于原型和原型链,相信有很多伙伴都说的上来一些,但有具体讲不清楚.但面试的时候又经常会碰到面试官的死亡的追问,我们慢慢来梳理这方面的知识! 要理解原型和原型链的关系,我们首先需要了解几个概念:1.什么 ...
- Js中关于构造函数,原型,原型链深入理解
在 ES6之前,在Javascript不存在类(Class)的概念,javascript中不是基于类的,而是通过构造函数(constructor)和原型链(prototype chains)实现的.但 ...
- JS原型、原型链深入理解
原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有”prototype”属性,函数对象有”prototype”属性,原型对象有”constructor”属性. 一.初识原 ...
- 理解js中的原型链
对象有”prototype”属性,函数对象有”prototype”属性,原型对象有”constructor”属性. 关于原型 在JavaScript中,原型也是一个对象,通过原型可以实现对象的属性继承 ...
- JS原型与原型链继承的理解
一.原型 先从构造函数开始吧! 构造函数是什么?构造函数与其他函数唯一的区别在于调用方式不同.任何函数只要通过new来调用就可以作为构造函数,它是用来创建特定类型的对象. 下面定义一个构造函数 Fem ...
- 理解js中的原型,原型对象,原型链
目录 理解原型 理解原型对象 实例属性与原型属性的关系 更简单的原型语法 原型的动态性 原型链 理解原型 我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象, ...
- js原型和原型链理解 constructor 构造函数
一.对象:普通对象 函数对象 二.构造函数特点:1.需要new实例化,内部使用this对象指向即将要生成的实例对象 2.首字母大写,用于区分普通函数 function Person(name){ ...
- js原型和原型链的简单理解
构造函数创建对象: function Person() { } var person = new Person(); person.name = 'Tian'; console.log(person. ...
- 【repost】JS原型与原型链终极详解
一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象.下面举例说明 function f ...
随机推荐
- script 表单验证
表单验证:一.非空验证:1.内容是不是空的.判断值的长度是不是0.length属性.压缩空格的函数. 2.内容是不是改变了. 二.对比验证:1.验证两个控件值的关系(相同,大小) 2.验证控件的值与某 ...
- 在div+css中用到的js代码注意return
今天做了一个项目,美工做好后放在了form中(没有加runat=server),由于用到了服务器控件,所以这里要加,否则报错,关键一段div代码是: <form id="form_re ...
- Activity一共有以下四种launchMode
1. standard: 无论什么情况都会生成一个新的Activity实例,并且放于栈顶. 2. singleTop:如果Activity纯在但是不位于栈顶,就重新生成一个Activity实例. 3. ...
- 高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框
上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输 ...
- acm poj1260 dp
题目大意: 买珍珠,每买一种珍珠需要额外付出十个这种珍珠的钱,但你可以买比这种珍珠高品质的珍珠来替换它(那么就只需要那高品质付出那额外的十个珍珠的钱了,但是每个珍珠的价钱也变化了) 这是一个dp. 令 ...
- 杂文:AlphaGo 与 Alan Turing
写于2016 3.8晚 AlphaGo 与 Alan Turing 如果我们可以被称为生物版本的机器人,承载着在上千年或是万年的时间内不断完善的人工智能,并正如行为主义所指出的那样,对不同的刺激做出相 ...
- 基于mAppWidget实现手绘地图(十五)–如何控制放大缩小
一般来说,可以使用以下几种方式来控制地图的放大/缩小 : 使用控件底部的缩放按钮 双击控件 pinch手势 物理按键 :I键标识缩小 :O键表示放大.(只有设备具有物理按键才行) 当然, ...
- jq:get获取json数据并以表格形式生成到页面
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 复习css3的部分属性
利用css3实现一个半月形的西瓜,利用queue实现吃西瓜的动画.练习例子 css3: 1.圆角 border-radius:100%; border-top-left-radius:5px; 2.变 ...
- [Mugeda HTML5技术教程之8]添加行为
上一节我们已经在新建的作品中添加了元素和动画,如果我们想要作品能够和用户互动,就需要给元素添加动作行为.在舞台上选中一个要添加动作的元素,在属性栏的动作下拉列表中选择一个动作.可选类别有链接.表单.行 ...