微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript中的构造方法

在我的一个问题中,我得到以下代码作为答案之一.我现在对语言的理解已经来得更好了,
只有一个小问题.
var person = function() {
     this.firstName = "";
     this.lastName = "";
} 

person.prototype.showFullName = function () { 
     console.log(this.firstName + " " + this.lastName); 
} 

var perObj = new person();
perObj.firstName = "Penelope";
perObj.lastName = "Barrymore";
perObj.showFullName();

考虑到对象,

var person = function() {
     this.firstName = "";
     this.lastName = "";
}

当我使用这个对象来调用该对象时,

var perObj = new person();

这是类似于构造方式的事情吗?

一时代码

var perObj = new person();

调用将以下两行自动执行?

this.firstName = "";
 this.lastName = "";

还有在我正在研究的博客之一,如果文件名是Samplescript.js,如果一个函数是使用与这个名称相同的名称,就像var Samplescript = function(){},这个函数会被认为是一个构造函数吗?
请澄清我这个

即使理论上的事情很清楚,我在建构者方面也没有得到任何令人满意的答案,在这个例子中,它的写作方式很清楚.

解决方法

首先这个人是一个常规的JavaScript函数.当你打电话,当然,线条:
this.firstName = "";
this.lastName = "";

被执行.构造函数功能比JS语言中真正存在的一个概念是一个概念.您需要通过调用新的MyCtr()来创建新的类似对象的构造函数.同时,您需要定期的功能来封装逻辑块,并使其在不同的地方可重用,而无需复制/粘贴代码.

您可以使用JavaScript中的所有函数作为构造函数.只需在函数调用表达式前添加新的关键字.这个事情改变了函数执行的上下文.没有新的功能是针对全局对象(浏览器中的窗口)执行的.而这个变量里面的函数是指上下文.

并不是每个功能都准备好成为一个构造函数.通常,构造函数正在使用此变量执行某些操作,该变量是对新MyCtr()调用期间创建的对象的引用.此外,构造函数从不返回值.

让我们看几个例子(您可以直接在浏览器的控制台中执行):

function foo() {
    this.a = 1;
}

foo();  // using function as a regular function. Ctx is window.
console.log(window.a);  // prints "1"
foo.call(window);  // explicitly specify execution ctx. The same as just foo() call

var instance = new foo();  // using foo as a constructor
console.log(instance.a);   // prints "1"

// actually you can do it without new keyword
var instance = {};  // manually create new object
foo.call(instance); // manually call foo against this object
console.log(instance.a);   // prints "1"

// However,the code above is not strictly equivalent to the code using new. 
// It omits the concept of prototype,but it's enough for our current task.

关于功能文件. Java中没有这样的东西,每个类都必须放在单独的文件中.您可以将所有的功能放在一个文件中,然后将其用作构造函数.但是,最佳做法是在每个文件(称为模块)中驻留一个构造函数(按类读取).

原文地址:https://www.jb51.cc/js/153479.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐