Как вы создаете метод для настраиваемого объекта в JavaScript? - программирование
Подтвердить что ты не робот

Как вы создаете метод для настраиваемого объекта в JavaScript?

Это как...

var obj = new Object();

obj.function1 = function(){
    //code
}

или что-то в этом роде?

4b9b3361

Ответ 1

var newObj = {
    met1 : function () {
        alert('hello');
    }
};

Тогда метод можно вызвать так:

newObj.met1();

Btw, при объявлении нового объекта, используйте литерал объекта ({}), а не конструктор new Object().

Ответ 2

Вы можете видеть из ответов, что у вас уже есть несколько способов.

#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 имеет метод, добавленный к прототипу, не имеет большого значения. (без учета клонирования)

Есть еще несколько способов добавления методов к объектам с использованием фабрик с закрытием или добавления "статических" свойств/методов к функциям или частных вложенных функций...:)

Ответ 3

Обычно используйте свойство prototype:

function YourObject()
{
    //
}

YourObject.prototype.yourMethod= function()
{
   //
}

Одна вещь, о которой я еще не упоминал, - это то, почему вы, возможно, захотите использовать свойство prototype поверх, скажем, объектно-литеральной нотации: это гарантирует, что определение функции будет использоваться во всех экземплярах объектов, созданных из ваш прототип функции, а не один раз за экземпляр.

Ответ 4

Не волнуйтесь, брат, вот код:

  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());

Ответ 5


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);

Ответ 6

С es6 вы можете сделать это следующим образом:

var a = {
    func(){
        return 'The value';
    }
}
    
document.getElementById('out').innerHTML = a.func();
   
<div id="out"></div>

Ответ 7

Вы также можете сделать следующее вместо использования метода 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();
}