6

私はいくつかのテストクラスを持っています

TestKlass = (function() {

    function TestKlass(value) {
      this.value = value != null ? value : 'hello world';
      console.log(this.value);
    }

    return TestKlass;

})();

x = new TestKlass;
x instanceof TestKlass; (gives true)

新しい空のオブジェクトがあります

y = {}
y instanceof Object

このようなyのプロパティを設定する方法を見つけることができますか

y.__proto__ = x.__proto__
y.constructor.prototype = x.constructor.prototype

この結果を得るために

y instanceof TestKlass => true

================================================== ==

更新:

そう。私の主な目的は、CLONE 関数を作成することです。今、私の解決策はうまくいきます。このコードを見てください:

JavaScript JS オブジェクトのクローン

Object._clone = function(obj) {
  var clone, property, value;
  if (!obj || typeof obj !== 'object') {
    return obj;
  }
  clone = typeof obj.pop === 'function' ? [] : {};
  clone.__proto__ = obj.__proto__;
  for (property in obj) {
    if (obj.hasOwnProperty(property)) {
      value = obj.property;
      if (value && typeof value === 'object') {
        clone[property] = Object._clone(value);
      } else {
        clone[property] = obj[property];
      }
    }
  }
  return clone;
};

CoffeeScript JS オブジェクトのクローン

# Object clone
Object._clone = (obj) ->
  return obj if not obj or typeof(obj) isnt 'object'
  clone = if typeof(obj.pop) is 'function' then [] else {}

  # deprecated, but need for instanceof method
  clone.__proto__ = obj.__proto__

  for property of obj
    if obj.hasOwnProperty property
      # clone properties
      value = obj.property
      if value and typeof(value) is 'object'
        clone[property] = Object._clone(value)
      else
        clone[property] = obj[property]

  clone

今、あなたはそれを試みることができます

A = new TestKlass
B = Object._clone(A)
B instanceof TestKlass => true

Moz FF 13 では問題なく動作しますが、クロスブラウザではないと思います。protoは非推奨です。

普遍的な解決策はないと思います。しかし、多分それは誰かのために役立つでしょう。

4

2 に答える 2

1

obj instanceof SomeConstructorSomeConstructor が obj のプロトタイプ チェーンのどこかにあるかどうかを確認します。

継承が必要な場合は、FirstConstructor の .prototype を新しく作成した SomeConstructor オブジェクトに設定する必要があります。

SomeConstructor = function() {}
FirstConstructor = function() {}
FirstConstroctor.prototype = new SomeConstructor();

var y = new FirstConstroctor();
y instanceof FirstConstructor; // true
y instanceof SomeConstructor ; // true, it bubbles from FirstConstructor.__proto__ to SomeConstructor
于 2012-06-25T08:58:15.017 に答える