Pau*_*aul 42 javascript function object
你能把一个函数称为对象吗?例如:
function Tip(txt){
this.content = txt;
this.shown = false;
}
Run Code Online (Sandbox Code Playgroud)
和:
var tip = new Tip(elem.attr('title'));
Run Code Online (Sandbox Code Playgroud)
我的问题:
new
一个函数吗? Sea*_*ira 121
你正在寻找这个constructor
概念.
JavaScript 中的所有函数都是对象,可用于创建对象:
function make_person(firstname, lastname, age) {
person = {};
person.firstname = firstname;
person.lastname = lastname;
person.age = age;
return person;
}
make_person("Joe", "Smith", 23);
// {firstname: "Joe", lastname: "Smith", age: 23}
Run Code Online (Sandbox Code Playgroud)
但是,为了创建特定类型的新对象(也就是说,继承原型,具有构造函数等),函数可以引用this
,如果使用new
运算符调用它,则它将返回一个包含所有对象的对象this
函数中定义的属性- this
在这种情况下引用我们正在创建的新对象.
function make_person_object(firstname, lastname, age) {
this.firstname = firstname;
this.lastname = lastname;
this.age = age;
// Note, we did not include a return statement
}
Run Code Online (Sandbox Code Playgroud)
关键的区别之间注意make_person
和make_person_object
是调用new make_person()
(而不是简单地make_person()
)不会做任何不同......都将产生相同的对象.但是,在make_person_object()
没有new
操作员的情况下调用将this
在当前this
对象上定义您的属性(通常,window
如果您在浏览器中操作).
从而:
var Joe = make_person_object("Joe", "Smith", 23);
console.log(Joe); // undefined
console.log(window.firstname) // "Joe" (oops)
var John = new make_person_object("John", "Smith", 45);
console.log(John); // {firstname: "John", lastname: "Smith", age: 45}
Run Code Online (Sandbox Code Playgroud)
此外,正如@RobG指出的那样,这种做事方式创建了对我们创建的每个"人" 的prototype
属性的引用make_person_object
.这使我们能够在事后添加方法和属性:
// Assuming all that came before
make_person_object.prototype.full_name = "N/A";
make_person_object.prototype.greet = function(){
console.log("Hello! I'm", this.full_name, "Call me", this.firstname);
};
John.full_name // "N/A"
John.full_name = "John Smith";
make_person_object.full_name // Still "N/A"
John.greet(); // "Hello! I'm John Smith Call me John"
Run Code Online (Sandbox Code Playgroud)
公约认为构造函数make_person_object
是大写的,单一化的和"被弄明的"(因为没有更好的术语) - 因此我们会有一个Person
构造函数,而不是一个make_person_object
可能被误认为普通函数的构造函数.
也可以看看:
new
运营商 Ada*_*ark 19
每个函数都有引用this
.如果你调用Tip()
,this
将引用全局对象.如果调用new Tip()
,则会创建一个引用Tip.prototype的新对象,并this
引用该新对象.
您不能new
在对象上使用,例如new {}
throws TypeError: object is not a function
.如果您正在引用new Object()
那么可行,因为它Object
是一个函数.
小智 6
是.在JavaScript中,从技术上讲,一切都是对象.当您使用new时,它会创建Tip对象的一个实例,然后调用Tip函数,就像它是一个构造函数一样.
如果要向Tip对象添加函数,则应将它们添加到Tip的原型中,如下所示:
Tip.prototype.getContent = function() {
return this.content;
};
Run Code Online (Sandbox Code Playgroud)
如果你有,然后你做:
var tip = new Tip("this is my content.");
alert(tip.getContent());
Run Code Online (Sandbox Code Playgroud)
它会显示一条消息"这是我的内容".
但是,如果对象具有功能实现,则只能使用new.所以这不起作用:
var Tip = { content: txt, show: false };
var tipObj = new Tip();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
36874 次 |
最近记录: |