문제

JavaScript 할 수 있는 기능으로 처리하는 개체는 경우 첫 번째 정의한 변수로 기능할 수 있습 그 후 속성을 추가하는 기능입니다.당신은 어떻게 반대로,추가 기능을"object"?

이동:

var foo = function() { return 1; };
foo.baz = "qqqq";

이 시점에서, foo() 함수를 호출하여,그리고 foo.baz 값이"qqqq".

그러나,당신이 할 경우 호텔 할당 부분은 첫째,당신은 어떻게 할당하는 기능을 변?

var bar = { baz: "qqqq" };

나는 지금 무엇을 할 수 있을 정렬한 bar.baz 하는 값이"qqqq" bar() 함수를 호출?

도움이 되었습니까?

해결책

그것은 혼동하기 쉽지만,여기할 수 없습니다(쉽게나 분명히거나 내가 알기로)당신이 무엇을 원합니다.희망이 도움이 될 것입니다 분명하는 것입니다.

첫째,모든 개체에서 Javascript 에서 상속되는 개체 개체입니다.

//these do the same thing
var foo = new Object();
var bar = {};

둘째,기능 체에서 Javascript.특히,그들은 함수 개체입니다.함수 개체로부터 상속되체 개체입니다.체크 아웃 기능성자

var foo = new Function();
var bar = function(){};
function baz(){};

면 변수를 선언할을 수"Object"할 수 없습니다(쉽게나 분명히 또는 멀리로 나도 알아요)그것을 변환하는 함수 개체입니다.당신이 필요할 것을 선언한 새로운 객체의 형식 기능(기능으로 생성자를 지정하여 변수 익명의 기능 등) 과 복사본을 어떤 특성을의 방법에서 당신의 오래된 개체입니다.

마지막으로 예측 가능한 질문에 한 번도 뭔가로 선언된 함수할 수 없습니다(지금까지 내가 알고)변경 functionBody/소스입니다.

다른 팁

가 나타나지 않는 표준이 그것을 할 수있는 방법이지만,이 작품이다.

왜 그러나,질문입니다.

function functionize( obj , func )
{ 
   out = func; 
   for( i in obj ){ out[i] = obj[i]; } ; 
   return out; 
}

x = { a: 1, b: 2 }; 
x = functionize( x , function(){ return "hello world"; } );
x()   ==> "hello world" 

이 단순히 다른 어떤 방법으로 이것을 달성하기 위하여, 일

x={}
x() 

을 반환합니다"오류".기 때문에"x"는"object"그리고 당신은 그것을 변경할 수 없습니다.그에 대한으로 합리적인 노력을 할

 x = 1
 x[50] = 5
 print x[50] 

그것은 작동하지 않습니다.1 정수입니다.정수 없는 편안 방법입니다.당신이 그것을 할 수 없습니다.

체 종류는 기능과 개체 자체가 기능을 인스턴스화.

  javascript:alert([Array, Boolean, Date, Function,
                       Number, Object, RegExp, String].join('\n\n'))

표시(FireFox):

function Array() {
    [native code]
}

function Boolean() {
    [native code]
}

function Date() {
    [native code]
}

function Function() {
    [native code]
}

function Number() {
    [native code]
}

function Object() {
    [native code]
}

function RegExp() {
    [native code]
}

function String() {
    [native code]
}

특히,주 함수 개체 function Function() { [native code] }, 로 정의 재발 관련(재귀한 정의를 사용하여 자).

또한,주 답 124402#124402 불완전한 1[50]=5.이것은 속성 값을 할당할 수는 객체에 유효 Javascript.관찰,

javascript:
     alert([  [].prop="a",   true.sna="fu",   (new Date()).tar="fu",
                     function(){}.fu="bar",   123[40]=4,   {}.forty=2,
                         /(?:)/.forty2="life",   "abc".def="ghi"  ].join("\t"))

표시

a   fu  fu  bar 4   2   life    ghi

해석하고 실행하는 올바르게 따라 자바 스크립트의"규칙".

물론 항상 주름 및 매니페스트 =.체가 종종"단락은"그 값을 대신에 풀 본격적인 엔티티에 할당되는 경우는 변수입니다.이 문제는 부울체고 부울 값입니다.

명시적 개체 식별이 이 문제를 해결합니다.

javascript: x=new Number(1);  x[50]=5;  alert(x[50]);

"과부는"매우 합법적인 Javascript 운동하고 명시적으로 승인된 메커니즘 prototyping 하지만 코드를 난독될 수 있는 위험이 있습니다.

최종 참고:

javascript: alert(  123 . x = "not"  );

javascript: alert( (123). x = "Yes!" );  /* ()'s elevate to full object status */

사용 일시적 변수:

var xxx = function()...

다음 사본을 모든 속성이 원래부터 개체:

for (var p in bar) { xxx[p] = bar[p]; }

마지막으로 할당하는 새로운 기능과 구성하여 원래의 변:

bar = xxx;
var A = function(foo) {                                                                                                      
  var B = function() {                                                                                                       
    return A.prototype.constructor.apply(B, arguments);
  };
  B.prototype = A.prototype;                                                                                                 
  return B;                                                                                                                  
}; 

JavaScript 할 수 있는 기능을 으로 처리되는 개체--추가할 수 있습니다 제공하는 기능입니다.당신은 어떻게 반대로,추가 기능 object?

당신이 나타납을 혼동된다.기능,자바 스크립트에서 체입니다.고 변수 변수.당신이 예상하지 않을 것이 작동:

var three = 3;
three = 4;
assert(three === 3);

...그래서 당신은 왜 기대하는 할당 함수의 변수를 어떻게든지 이전 값?아마도 몇 가지 주석을 명확히 할 것이다 일들이 당신을 위해:

// assigns an anonymous function to the variable "foo"
var foo = function() { return 1; }; 
// assigns a string to the property "baz" on the object 
// referenced by "foo" (which, in this case, happens to be a function)
foo.baz = "qqqq";

NB:게시물 작성의 스타일에서 내가 어떻게 해결된 문제입니다.나는 100%확실히 그것은에서 사용할 수 있는 OP 의 경우입니다.

이 게시물을 찾고 있는 동안에 대한 방법 개체를 변환하는 서버에서 작성되어 배달하여 클라이언트에 JSON/ajax.

는 효과적으로 나에게 왼쪽에서 동일한 상황으로 협동체가 되어야겠다는 생각이 들었지요 변환로 기능할 수 있도록 인스턴스를 만들에 그것의 클라이언트입니다.

결국 나는 이것은 작업(지금까지도):

var parentObj = {}

parentObj.createFunc = function (model)
{
    // allow it to be instantiated
    parentObj[model._type] = function()
    {
        return (function (model)
        {
            // jQuery used to clone the model
            var that = $.extend(true, null, model);
            return that;
        })(model);
    }
}

다음 사용할 수 있는 다음과 같:

var data = { _type: "Example", foo: "bar" };
parentObject.createFunc(data);
var instance = new parentObject.Example();

내 경우에는 실제로 원하는 기능과 연관된 결과 객체를 인스턴스,또는 전달에서 매개 변수간의 인스턴스화하는니다.

그래서 나의 코드:

var parentObj = {};
// base model contains client only stuff
parentObj.baseModel =
{
    parameter1: null,
    parameter2: null,
    parameterN: null, 
    func1: function ()
    {
        return this.parameter2;
    },
    func2: function (inParams) 
    {
        return this._variable2;
    }
}

// create a troop type
parentObj.createModel = function (data)
{
    var model = $.extend({}, parentObj.baseModel, data);
    // allow it to be instantiated
    parentObj[model._type] = function(parameter1, parameter2, parameterN)
    {
        return (function (model)
        {
            var that = $.extend(true, null, model);
            that.parameter1 = parameter1;
            that.parameter2 = parameter2;
            that.parameterN = parameterN;
            return that;
        })(model);
    }
}

고 따라서:

// models received from an AJAX call
var models = [
{ _type="Foo", _variable1: "FooVal", _variable2: "FooVal" },
{ _type="Bar", _variable1: "BarVal", _variable2: "BarVal" },
{ _type="FooBar", _variable1: "FooBarVal", _variable2: "FooBarVal" }
];

for(var i = 0; i < models.length; i++)
{
    parentObj.createFunc(models[i]);
}

그때 사용할 수 있습니다:

var test1 = new parentObj.Foo(1,2,3);
var test2 = new parentObj.Bar("a","b","c");
var test3 = new parentObj.FooBar("x","y","z");

// test1.parameter1 == 1
// test1._variable1 == "FooVal"
// test1.func1() == 2

// test2.parameter2 == "a"
// test2._variable2 == "BarVal"
// test2.func2() == "BarVal"

// etc
var bar = { 
    baz: "qqqq",
    runFunc: function() {
        return 1;
    }
};

alert(bar.baz); // should produce qqqq
alert(bar.runFunc()); // should produce 1

나는 생각을 찾고 계신다.

작성할 수도 있습니다 다음과 같다:

function Bar() {
    this.baz = "qqqq";
    this.runFunc = function() {
        return 1;
    }
}

nBar = new Bar(); 

alert(nBar.baz); // should produce qqqq
alert(nBar.runFunc()); // should produce 1
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top