瞌睡中的葡萄虎

博客园 首页 新随笔 联系 订阅 管理
  148 随笔 :: 0 文章 :: 16 评论 :: 40万 阅读

通过构造函数的方式创建和基于工厂的创建类似,最大的区别就是函数的名称就是类的名称,按照java的约定,第一个字母大写。

使用构造函数创建对象时,在函数内部是通过this关键字来完成属性的定义

复制代码
function Person(name, age){
    this.name = name;
    this.age = age;
            
    //带来的问题是所有的对象都会为该行为分配空间
    this.say = function(){  //注意:say也是Person的一个属性
        alert(this.name + "-->" + this.age);
    }
}

//通过new Person来创建对象
var p1 = new Person("Leon",22);
var p2 = new Person("Ada",32);
p1.say(); 
p2.say();
alert(typeof p1); //object

//使用构造函数的方式可以通过以下方式来检测对象的类型
alert(p1 instanceof Person);  //true
alert(p1.say == p2.say);     //false  由于方法是定义在类中的,所有这两个say不是一样的
复制代码

 

使用构造函数创建所带来的第一个问题就是每一个对象都会存在一个方法的拷贝,如果对象的方法很多的话,空间的占有率就会大大增加

 

如何改进?可以将函数放在全局变量中定义,这样可以让类中的行为/方法指向同一个函数。

复制代码
function Person(name, age){
    this.name = name;
    this.age = age;
            
    this.say = say;
}

function say(){
    alert(this.name + "-->" + this.age);
}

var p1 = new Person("Leon",22);
var p2 = new Person("Ada",32);
p1.say(); 
p2.say();

alert(p1 instanceof Person);  //true
alert(p1.say == p2.say);     //true
复制代码

将行为设置为全局的行为,如果将所有的方法都设计成全局函数的话,这个函数就可以被window调用,此时就破坏了对象的封装性

而且如果某个对象有大量的方法,就会导致整个代码中充斥着大量的全局函数,这样将不利于开发。

 

posted on   瞌睡中的葡萄虎  阅读(258)  评论(0编辑  收藏  举报
编辑推荐:
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
阅读排行:
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
点击右上角即可分享
微信分享提示