public IJsValue SetValue(IJsValue self, IJsValue value) { if (!Writable) { throw new JsReferenceException("Property {0} is not writable", Name); } if (!ReferenceEquals(self, Owner)) { // We are setting an inherited property in a subclassed instance var @this = self.Cast<IJsObject>("Cannot set property {0} on non-object", Name); // Is the property present in subclassed instance? var pd = @this.GetOwnProperty(Name); if (pd != null) { return pd.SetValue(self, value); } // If not, create it and return @this.DefineOwnProperty(new OwnedValuePropertyDescriptor(@this, Name, value, Flags)); return value; } return Value = value; }