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__属性
时间: 2024-11-10 01:28:24

js原型和原型链个人理解(我的理解)的相关文章

js中原型和原型链理解

js中属性的继承以及查找都会用到原型链的知识,对于深入学习js的人来说是一个难点也是一个重点,下面梳理下对于原型以及原型链的理解. 首先,我们要知道什么是原型以及原型链?他们有什么样的作用? 可以理解为JS对象在创建时都会与之关联另一个对象,这就是我们所说的原型,每一个对象都会从原型"继承"属性.下图表示了构造函数与实例原型的关系,其中Object.prototype表示实例原型. 那么实例与实例原型又是怎么联系的呢?接下来又要说到另一个属性__proto__,每一个JS对象都有一个属

JS原型、原型链深入理解

原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有”prototype”属性,函数对象有”prototype”属性,原型对象有”constructor”属性. 一.初识原型在JavaScript中,原型也是一个对象,通过原型可以实现对象的属性继承,JavaScript的对象中都包含了一个”[[Prototype]]”内部属性,这个属性所对应的就是该对象的原型.“[[Prototype]]”作为对象的内部属性,是不能被直接访问的.所以为了方便查看一个对象的原型,Fir

深入理解JS继承和原型链

对于那些熟悉基于类的面向对象语言(Java 或者 C++)的开发者来说,JavaScript 的语法是比较怪异的,这是由于 JavaScript 是一门动态语言,而且它没有类的概念( ES6 新增了class 关键字,但只是语法糖,JavaScript 仍旧是基于原型). 涉及到继承这一块,Javascript 只有一种结构,那就是:对象.在 javaScript 中,每个对象都有一个指向它的原型(prototype)对象的内部链接.这个原型对象又有自己的原型,直到某个对象的原型为null 为止

js原型和原型链理解 constructor 构造函数

一.对象:普通对象   函数对象 二.构造函数特点:1.需要new实例化,内部使用this对象指向即将要生成的实例对象  2.首字母大写,用于区分普通函数 function Person(name){ this.name=name } var person1=new Person('xiaohong') var person2=new Person('lili') person1.constructor=Person   constructor指向构造函数,Person的内置属性 Person.

js原型和原型链的简单理解

构造函数创建对象: function Person() { } var person = new Person(); person.name = 'Tian'; console.log(person.name); //Tian Person 就是一个构造函数,使用 new 创建了一个实例对象 person prototype 每个函数都有一个 prototype 属性 每一个 javaScript 对象(null除外)在创建的时候就会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都会

JS原型与原型链终极讲解

function Person () { this.name = 'John'; } var person = new Person(); Person.prototype.say = function() { console.log('Hello,' + this.name); }; person.say();//Hello,John 上述代码非常简单,Person原型对象定义了公共的say方法,虽然此举在构造实例之后出现,但因为原型方法在调用之前已经声明,因此之后的每个实例将都拥有该方法.从

JS原型与原型链终极详解 (转载)

这篇文章需要认认真真仔仔细细的看才能看懂 一. 普通对象与函数对象  JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象.下面举例说明 function f1(){}; var f2 = function(){}; var f3 = new Function('str','console.log(str)'); var o3 = new f1(); var o1 = {}; var o2 =new Object

JS原型与原型链终极详解

一. 普通对象与函数对象  JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象.下面举例说明 function f1(){}; var f2 = function(){}; var f3 = new Function('str','console.log(str)'); var o3 = new f1(); var o1 = {}; var o2 =new Object(); console.log(typeo

理解javascript原型与原型链

想要学习javascript中的面向对象编程(oop),首先就要了解原型及原型链. 先来个例子,了解原型 1 function Foo(y){ 2 this.y = y; 3 } 4 Foo.prototype.x = 10; 5 Foo.prototype.calculate = function(z){ 6 return this.x+this.y+z; 7 }; 8 var b = new Foo(20); 9 alert(b.calculate(30)); js中除了基本数据类型,一切皆

深入探究js的原型与原型链

最近在看<javascript高级程序设计>,看完之后,觉得感触,然后我今天又看到了一篇文章,说的很搞笑.就想整理下自己所学的. 首先,如果我们把ECMAScript的对象想象为散列表,即一组名值对,其中值可以是数据或函数. 那究竟对象.原型对象.构造函数.继承.原型链. 原型属性的共享.原型的动态性.原型的整体重写呢,来一组简单粗暴的描述哈,还是挺搞笑的. 1)人是人他妈生的,妖是妖他妈生的.人和妖都是对象实例,而人他妈和妖他妈就是原型.原型也是对象,叫原型对象. 2)人他妈和人他爸啪啪啪能