`
y1d2y3xyz
  • 浏览: 257065 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

构造函数作用域的安全

阅读更多
在创建javascrip对象的时候,我们用得最多的写法可能就是构造函数+原型 的方式:
function Person(name,age,job){
    this.name = name;
    this.age = age;
    this.job = job;
}
var p = new Person('zhangsan','25','it');
alert(p.name);//zhangsan

上面的执行没问题,但当我把Person当函数使用的时候:
var p1 = Person('lisi','30','it enginner');
alert(window.name);//lisi

这里Person的name属性已经到了window对象下了,也就是意味着Person的this指向的是window对象了,所以这样是很容易导致很多问题的,不过既然有这样问题出现也就有解决的办法:
function Person(name,age,job){
    if(this instanceof Person){
         this.name = name;
         this.age = age;
         this.job = job;
    }else{
         return new Person(name,age,job);
    }
}

这样的话就强制的以实例的方式返回,也就不存在前面作用域安全性问题了
分享到:
评论

相关推荐

    包含构造函数和析构函数的C++程序

    当程序执行完毕或对象超出作用域时,析构函数会被自动调用,输出一条消息表示析构函数被调用。由于这个例子中的对象是在栈上分配的,析构函数会在`main`函数执行完毕后自动调用。如果对象是动态分配的,则需要显式地...

    C++简单类(构造函数,析构函数以及拷贝构造函数)的实现

    析构函数是另一种特殊成员函数,当对象生命周期结束时(如对象超出作用域或动态分配的对象被显式删除时),析构函数会自动调用。`cPerson`中的析构函数`cPerson::~cPerson()`在本例中为空,这意味着没有资源需要特别...

    C++实现 类string的 普通构造函数, 拷贝构造函数 析构函数 和赋值函数

    析构函数在对象生命周期结束时(如离开作用域或显式删除)自动调用,用于清理对象分配的资源。对于`std::string`,析构函数通常是自动管理的,但如果你自定义了`std::string`,可能需要手动处理: ```cpp class ...

    面试必备的构造函数的重点

    局部对象在其作用域结束时立即析构,而动态分配的对象(使用`new`)在不再引用时需要手动释放,否则可能导致内存泄漏。 总的来说,理解和熟练运用构造函数和析构函数是C++编程中不可或缺的基础,特别是在面试时,对...

    构造函数重载

    2. **构造函数的重载**:重载意味着在同一个作用域内,可以有多个同名但参数列表不同的函数。在构造函数的情况下,这意味着一个类可以有多个构造函数,每个构造函数接受不同数量或类型的参数。这允许用户根据需要...

    章构造函数和析构函数PPT学习教案.pptx

    析构函数则与构造函数相反,它在对象生命周期结束(通常是对象超出作用域或delete动态分配的对象)时被调用,用于执行清理工作,如释放内存、关闭文件等。析构函数的名字是类名前加上波浪线`~`。 对于问题1至10的...

    数据结构 C++ 详细注释 构造函数与析构函数 类型转换.rar

    析构函数则与构造函数相反,它是当对象生命周期结束(通常是在对象离开其作用域或被删除)时调用的函数。析构函数的任务是清理对象可能占用的资源,如释放动态分配的内存。C++中,析构函数的名字是以波浪线(~)开头...

    构造函数与析构函数_构造函数ppt_

    在编程领域,特别是面向对象编程(Object-Oriented Programming,OOP)中,构造函数与析构函数是两个至关重要的概念。...在实际开发中,熟练掌握构造函数和析构函数的使用,将有助于编写出更加安全、易于维护的软件。

    C++构造函数析构函数

    **构造函数**是C++中一个特殊的成员函数,它的主要任务是在创建对象时初始化对象的状态。构造函数的名称必须与类名相同,且没有返回类型,即使是void类型也不能声明。在给定的例子中,`jx(int a, int b)`就是矩形类`...

    C++面试试题-拷贝构造函数

    2. 当`b`离开作用域时,其析构函数也被调用,尝试释放同一块内存,导致双重释放错误。 #### 解决方案 为了避免此类问题,可以考虑以下几点: 1. **智能指针**:使用如`std::unique_ptr`或`std::shared_ptr`等智能...

    运用导数运算法则构造函数的五种题型.pdf

    总结来说,导数运算法则在解决构造函数相关问题中具有十分重要的作用,通过构造函数并研究其单调性,我们可以解决与导数和不等式相关联的高中数学问题。掌握这些方法和技巧,对于高考数学应试以及日后的高等数学学习...

    构造函数和析构函数PPT学习教案.pptx

    **析构函数**与构造函数相反,它在对象生命周期结束时(例如,对象的作用域结束或者动态分配的对象被delete)被调用,用于清理对象资源。析构函数的名字是类名前加上一个波浪线`~`。尽管析构函数没有返回值,但它...

    论C++构造函数中的不合理设计

    - **问题分析**:这种规定使得无法在同一个作用域内定义多个具有不同行为但名字相同的构造函数。此外,如果类名更改,则所有相关的构造函数也需要随之更改,这增加了维护成本。 - **解决方案**:考虑允许构造函数...

    js变量作用域

    ### JavaScript 变量作用域详解 #### 一、引言 在探讨JavaScript的面向对象特性之前,理解变量作用域的概念至关重要。本篇文章旨在通过一系列示例和解释,帮助读者掌握JavaScript中的变量作用域机制。 #### 二、...

    c++(7) 构造和析构函数

    3. **调用**: 当对象离开其作用域或被显式删除时,析构函数会被自动调用。 4. **参数**: 析构函数不能有任何参数。 5. **唯一性**: 一个类只能有一个析构函数,因此析构函数不能被重载。 6. **自动生成**: 如果类中...

    C++构造函数.pdf

    析构函数与构造函数相反,它在对象生命周期结束时(例如,对象超出作用域或被delete)自动调用,用于释放对象可能占用的资源。编译器会为每个类生成一个默认的析构函数,它通常用于清理动态分配的内存或其他需要手动...

    构造函数与析构函数 C++

    析构函数与构造函数相反,它在对象生命周期结束时(通常是对象离开其作用域或被删除时)自动调用,用于执行清理工作,如释放动态分配的内存。在实验的三个部分中: - 时间类(TIME)的析构函数简单地输出了一条消息`...

    构造函数和析构函数的详细解释

    析构函数与构造函数相反,它在对象的作用域结束,即对象即将被销毁时自动调用。析构函数用于清理对象,如释放内存、关闭文件或释放其他资源。析构函数的名称由波浪线(~)前缀加上类名构成,它也不接受参数且无...

    C#中静态构造函数的几点说明介绍

    静态构造函数与实例构造函数并存不会冲突,因为它们分别作用于类和实例层面。 5. 执行次数: 静态构造函数在整个应用程序域中只执行一次,无论类的实例创建多少次。 6. 继承特性: 静态构造函数不被子类继承。...

Global site tag (gtag.js) - Google Analytics