Это как...
var obj = new Object();
obj.function1 = function(){
//code
}
или что-то в этом роде?
Это как...
var obj = new Object();
obj.function1 = function(){
//code
}
или что-то в этом роде?
var newObj = {
met1 : function () {
alert('hello');
}
};
Тогда метод можно вызвать так:
newObj.met1();
Btw, при объявлении нового объекта, используйте литерал объекта ({}
), а не конструктор new Object()
.
Вы можете видеть из ответов, что у вас уже есть несколько способов.
#1
var o = new Object();
o.method = function(){}
#2
var o = new Object();
o.prototype.method = function(){}
#3
function myObject() {
this.method = function(){}
}
var o = new myObject();
#4
function myObject() {}
myObject.prototype.method = function(){}
var o = new myObject();
#5
var o = {
method: function(){}
}
# 3 и # 4 используют функцию-конструктор. это означает, что вы можете использовать их для создания нескольких объектов одного и того же класса (классы на самом деле не существуют в JavaScript)
# 4 отличается от # 3, потому что все объекты, построенные С# 4, будут совместно использовать метод "метод", поскольку он является свойством их прототипа. Это экономит память (но только очень маленькую сумму), и если вы измените метод прототипа, все объекты # 4 будут немедленно обновлены - даже если они уже были созданы.
# 1, # 2 и # 5 все в значительной степени эквивалентны. Это связано с тем, что, возможно, когда-нибудь будет только один из них за один раз, поэтому тот факт, что №2 имеет метод, добавленный к прототипу, не имеет большого значения. (без учета клонирования)
Есть еще несколько способов добавления методов к объектам с использованием фабрик с закрытием или добавления "статических" свойств/методов к функциям или частных вложенных функций...:)
Обычно используйте свойство prototype:
function YourObject()
{
//
}
YourObject.prototype.yourMethod= function()
{
//
}
Одна вещь, о которой я еще не упоминал, - это то, почему вы, возможно, захотите использовать свойство prototype
поверх, скажем, объектно-литеральной нотации: это гарантирует, что определение функции будет использоваться во всех экземплярах объектов, созданных из ваш прототип функции, а не один раз за экземпляр.
Не волнуйтесь, брат, вот код:
var myObj=function(){
var value=null
this.setValue=function(strValue){
this.value=strValue;
};
this.getValue=function(){
return this.value;
};
};
Вы можете вызвать этот объект следующим образом:
var obj= new myObj();
obj.setValue("Hi!");
alert(obj.getValue());
Function.prototype.implement = function(member, value) {
this[member] = value;
return this;
}
function MyFunction() {
//...
}
(function($){
$.implement("a", "blabla")
.implement("b", function(){ /* some function */ })
.implement("c" {a:'', b:''});
})(MyFunction);
С es6 вы можете сделать это следующим образом:
var a = {
func(){
return 'The value';
}
}
document.getElementById('out').innerHTML = a.func();
<div id="out"></div>
Вы также можете сделать следующее вместо использования метода Object.create().
Вызов функции:
com.blah.MyChildObj.prototype = createObject(com.blah.MyParentObj.prototype,
com.blah.MyChildObj);
Определение функции:
function createObject(theProto, theConst) {
function x() {};
x.prototype = theProto;
x.prototype.constructor = theConst;
return new x();
}