JS面向对象——构造函数模型

ECMAScript中的构造函数可用来创建特定类型的对象。我们可以创建自定义构造函数,从而定义对象类型的属性和方法,解决工厂模型中对象识别的问题。

<!DOCTYPE html>
<html>
<head>
    <title>构造函数模型</title>
    <script type="text/javascript">
        function Student(name,age,sex){//构造函数首字母大写,普通函数首字母小写
            //直接将属性和方法赋值给this对象
            this.name=name;
            this.age=age;
            this.sex=sex;
            this.sayName=function(){
                alert(this.name);
            };
        }

        /****************************** 构造函数模型 ******************************/
        /*创建Student的新实例实际经历的步骤:
            (1)创建一个新对象
            (2)将构造函数的作用域赋值给新对象(因此this指向了新对象)
            (3)执行构造函数中的代码(为新对象添加属性和方法)
            (4)返回新对象
        */
        var stu1=new Student("Lucy",10,"girl");//使用操作符new
        var stu2=new Student("Bob",9,"boy");

        //以上的stu1和stu2这两个对象的constructor(构造函数)属性均指向Student
        alert(stu1.constructor==Student);//true
        alert(stu2.constructor==Student);//true

        //对象的constructor属性最初是用来表示对象类型的。检测对象类型使用instanceof更可靠
        alert(stu1 instanceof Student);//true
        alert(stu2 instanceof Student);//true
        alert(stu1 instanceof Object);//true
        alert(stu2 instanceof Object);//true
        /*************************************************************************/

        /**************************** 1.构造函数当作函数 **************************/
        //当作构造函数
        var stu3=new Student("Nike",10,"boy");
        stu3.sayName();//"Nike"
        //当作普通函数
        Student("Greg",13,"boy");//添加到window对象
        window.sayName();//"Greg"
        //在另一个作用域中调用
        var o=new Object();
        Student.call(o,"Kristen",8,"girl");
        o.sayName();//"Kristen"
        /************************************************************************/

        /**************************** 2.构造函数模型问题 *************************/
        //问题:每个方法都要在每个实例上重新创建一遍,不同实例上的同名函数是不相等的。为解决这一问题于是就有了原型模型
        alert(stu1.sayName==stu2.sayName);//false
        /************************************************************************/

    </script>
</head>
<body>
</body>
</html>

部分摘自《JavaScript高级程序设计(第3版)》

原文地址:https://www.cnblogs.com/planetwithpig/p/11530794.html

时间: 2024-11-11 06:49:54

JS面向对象——构造函数模型的相关文章

JS面向对象——组合使用构造函数模型与原型模型

该模型为创建自定义类型最常用的方式. <!DOCTYPE html> <html> <head> <title>组合使用构造函数模型和原型模型</title> <script type="text/javascript"> //组合使用构造函数模型和原型模型——构造函数模型用于定义实例属性,原型模型用于定义方法和共享属性. function Student(name,age,sex){ this.name=name

简单粗暴地理解js原型链--js面向对象编程

简单粗暴地理解js原型链--js面向对象编程 原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧,想点与代码无关的事,比如人.妖以及人妖. 1)人是人他妈生的,妖是妖他妈生的.人和妖都是对象实例,而人他妈和妖他妈就是原型.原型也是对象,叫原型对象. 2)人他妈和人他爸啪啪啪能生出一堆人宝宝.妖他妈和妖他爸啪啪啪能生出一堆妖宝宝,啪啪啪就是构造函数,俗

js面向对象程序设置——创建对象

<script type="text/javascript">            //工厂方式        //1.原始方式        /* var objCar=new Object();        objCar.name="劳斯莱斯";        objCar.color="blue";        objCar.showColor = function() {          alert(this.colo

js面向对象深入理解

js面向对象深入理解 ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,ECMAScript 没有类的概念,因此它的对象也与基于类的语言中的对象有所不同. 一.创建对象 创建一个对象,然后给这个对象新建属性和方法. var box = new Object(); //创建一个Object 对象 box.name = 'Lee'; //创建一个name 属性并赋值 b

JS面向对象笔记二

菜单导航,<JS面向对象笔记一>,  参考书籍:阮一峰之<JavaScript标准参考教程> 一.构造函数和new命令 二.this关键字 三.构造函数和new命令 四.构造函数和new命令 五.构造函数和new命令 六.构造函数和new命令 七.构造函数和new命令 八.构造函数和new命令 一.构造函数和new命令 1.构造函数 JavaScript语言的对象体系,不是基于"类"的,而是基于构造函数(constructor)和原型链(prototype) 为

拖拽系列二、利用JS面向对象OOP思想实现拖拽封装

接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到这里突然想起一句话“没有任何一个题目是彻底完成的.总还会有很多事情可做......” 我想这句话程序开发大概也适用吧,前端开发人员总是可以结合自己之前学到“拖拽”相关知识,不断扩展.完善.无穷无尽.......     利用匿名函数自执行实现封装 ;(function(){ //do somethi

浅谈JS面向对象之创建对象

hello,everybody,今天要探讨的问题是JS面向对象,其实面向对象呢呢,一般是在大型项目上会采用,不过了解它对我们理解JS语言是很大的意义. 首先什么是面向对象编程(oop),就是用对象的思想去写代码,那什么是对象呢,其实我们一直在用,像数组 Array  时间 Date 都是对象,并且这些对象是系统创建的,所以叫系统对象,而我们自己当然也可以创建对象,一般对象有两部分组成: 1 方法 (动态的 对象下面的函数)比如Array 的push(),sort()方法 2  属性 (静态的,相

JS面向对象(封装,继承)

在六月份找工作中,被问的最多的问题就是: js面向对象,继承,封装,原型链这些,你了解多少? 额,,,我怎么回答呢, 只能说,了解一些,不多不少,哈哈哈哈,当然,这是玩笑话. 不过之前学过java,来理解这些还是很容易的. 所以趁着自己空闲的时间,理一理,,这些,, 一.封装 1.原始方法 1 // 通过new关键字生成一个对象,然后根据javascript是动态语言的特性来添加属性和方法,构造一个对象.其中this表示调用该方法的对象. 2 var obj = new Object(); 3

JS面向对象(1)——构造函数模式和原型模式

1.构造函数模式 构造函数用来创建特定的类型的对象.如下所示: function Person(name,age,job){ this.name=name; this.job=job; this.age=age; this.sayName=function(){ alert(this.name); }; } var person1=new Person('nick',20,'student');var person2=new Person('nick',20,'student');alert(p