面向对象-原型

<script type="text/javascript">

        function CreatePeo(n){
            this.name=n;
        }
        CreatePeo.prototype.emma="好人"//给函数对象prototype属性添加
        ,会体现在a.__proto__即在将来实例的父级得到 

        CreatePeo.prototype.show=function(){//现在就是把车给父亲,两个儿子都可以开
            console.log(this.name)//在构造函数的prototype的方法内的this会自动指向将来new出来的实例
        }
        var a=new CreatePeo("admin")
        var b=new CreatePeo("root")

        a.show()
        b.show()

        console.log(a.__proto__)//{emma: "好人", constructor: ?}
        现在给函数身上添加属性,会被将来实例的父级捕捉到,考虑到就近原则,
        现在打印a.emma就可以找到好人

        富豪有两个孩子只有一个车库,就把孩子的两辆车都卖掉,给富豪买一辆车,两个儿子轮流开;即把代买里面的show都没了

        console.log(a)//CreatPeo {name: "admin", show: ?}
                        //name: "admin"
                        //show: ? ()
                        //__proto__: Object
        console.log(b)

        console.log(a.show==b.show)        //true  两个人开的是同一辆车

        // __proto__原型链:指向自身的父级对象

        console.log(a.__proto__)//{constructor: ?}
        // constructor:指针:指向自身

        console.log(a.__proto__.constructor==CreatePeo)//true

        console.log(a.__proto__.constructor)//? CreatePeo(n){
//                                              this.name=n;
//                                              this.show=function(){
//                                                  console.log(this.name)
//                                              }
//                                          }
        console.dir(CreatePeo)//查看各种属性

        console.log(CreatePeo.prototype)//{constructor: ?}

        console.log(CreatePeo.prototype==a.__proto__)//true
        a.__proto__的父级是构造函数的prototype属性(CreatePeo.prototype)
        父级是一个对象,可以往父级身上添加属性

        就近原则
        对象访问属性或方法时,会先找自身有没有,有就执行,没有呢,直接顺着__proto__向上找寻,找到了,就执行,没找到继续向上,直到最顶层的Object对象,没有,报错

        构造函数中的this和构造函数的prototype上的方法中的this,指向的都是将来new出来的实例

        js中每种数据类型都有一个:__proto__:原型链:指向父级类型
        js中一般函数都有一个:prototype:原型对象,专门用来给将来new出来的对象作为父级使用

    </script>

原文地址:https://www.cnblogs.com/sansancn/p/10914971.html

时间: 2024-08-03 16:30:27

面向对象-原型的相关文章

JavaScript 随笔2 面向对象 原型链 继承

第六章 面向对象的程序设计 1.创建对象的几种方式 A)工厂模式 function CreatObj(name,sex,age){ this.name=name; this.sex=sex; this.age=age; } 缺点:虽然可以批量创建对象,却不能知道对象的类型 只知道他是Object类型: B)构造函数 function Person(name,sex){ this.name=name; this.sex=sex; this.sayName=function(){ alert(thi

面向对象原型链小结

构造函数: *)构造函数就是初始化对象的函数(给刚创建的对象赋值属性等). *)构造函数就是普通函数,内部的this指向window: 只有实例化对象后才被称为构造函数,内部的this指向实例. *)若构造函数内部存在返回值,且返回值的数据类型为值类型,那么调用这个函数时返回这个实例: 若构造函数内部返回值的数据类型为引用类型,那么调用这个函数时返回复杂数据. *)若构造函数在调用时没有传参,则构造函数的小括号可以省略. *)访问原型的方式:构造函数.prototype => 原型. *)Fun

JavaScript面向对象原型继承

<script type="text/javascript"> //原型链继承 function shape() { this.name="shape"; this.showname=function(){ console.log(this.name); } } function shape_Two() { this.name='shape_Two' } function Triangle(side,height) { this.name="T

JS面向对象-原型对象,实例对象,构造函数的关系

JS中每创建一个函数,该函数就会自动拥有一个prototype属性,为什么那??  因为最根上的object拥有一个prototype属性,而js中所有的对象又都继承自object,所以js中所有的对象都拥有一个prototype属性,而在js中函数也是对象,所以js中每个函数也都有一个prototype属性. 例如:function Person(){...} 和function Dog(){...} 而每一个prototype属性又会获得一个constructor属性 该constructo

面向对象-原型对象

创建对象 Js中可以用构造函数模式创建对象,如: function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = function () { alert(this.name); } } var person1 = new Person("Nicholas", 29, "aa"); var person2 = new Person(&q

第六篇 javascript面向对象

h1 { background-color: palegreen } 一.闭包 闭包是指可以包含自由(未绑定到特定对象)变量的代码块. 「闭包」,是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 闭包是个函数,而它「记住了周围发生了什么」.表现为由「一个函数」体中定义了「另个函数」 由于作用域链只能从内向外找,默认外部无法获取函数内部变量.闭包,在外部获取函数内部的变量. <script> name="aa"; funct

浅析JS原型对象&amp;实例对象&amp;构造函数(转)

浅析原型对象,实例对象,构造函数的关系 原文地址:JS面向对象-原型对象,实例对象,构造函数的关系(http://blog.csdn.net/u014205965/article/details/45798861) 因为最根上的object拥有一个prototype属性,而js中所有的对象又都继承自object,所以js中所有的对象都拥有一个prototype属性,而在js中函数也是对象,所以js中每个函数也都有一个prototype属性. 例如:function Person(){...} 和

原型与继承学习笔记1

浅谈对象 面向对象原型链继承这块,应该算是javascript中最难理解的部分了,小弟脑子比较难转弯,也是看了好久视频,博文,慢慢的才有了自己的理解,现在记录一下学习的内容和总结.首先第一节应该说说对象这个东西了,js中对象和其他语言还是有所不同的,现在切入正题,开始浅谈对象. 什么是对象 定义(ECMA-262):无序属性的集合,其属性可以包含基本值.对象或者函数. 通过定义可以看出来,对象是属性的集合,这些属性又会是一个基本值,一个函数或者又是一个新的对象.记住,函数也是对象,了解这点以后原

原型,对象和原型链

普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象. 原型对象 在JavaScript 中,每当定义一个对象(函数)时候,对象中都会包含一些预定义的属性.其中函数对象的一个属性就是原型对象 prototype.注:普通对象没有prototype,但有__proto__属性.优点:包含可以让所有实例共享的属性和方法缺点:省略了为构造函数传递初始参数:所有实例在默认情况下的参数一致 共享用途:面